{"id":41865254,"url":"https://github.com/tomitribe/tribestream-api-registry","last_synced_at":"2026-01-25T11:39:52.809Z","repository":{"id":57740997,"uuid":"65823863","full_name":"tomitribe/tribestream-api-registry","owner":"tomitribe","description":"Tribestream API Registry","archived":false,"fork":false,"pushed_at":"2016-12-05T22:30:34.000Z","size":1888,"stargazers_count":1,"open_issues_count":26,"forks_count":10,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-11-07T02:00:50.094Z","etag":null,"topics":["tribestream"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tomitribe.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-08-16T13:45:01.000Z","updated_at":"2019-07-09T23:29:15.000Z","dependencies_parsed_at":"2022-09-06T23:30:58.644Z","dependency_job_id":null,"html_url":"https://github.com/tomitribe/tribestream-api-registry","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/tomitribe/tribestream-api-registry","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomitribe%2Ftribestream-api-registry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomitribe%2Ftribestream-api-registry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomitribe%2Ftribestream-api-registry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomitribe%2Ftribestream-api-registry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tomitribe","download_url":"https://codeload.github.com/tomitribe/tribestream-api-registry/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomitribe%2Ftribestream-api-registry/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28752668,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T10:25:12.305Z","status":"ssl_error","status_checked_at":"2026-01-25T10:25:11.933Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["tribestream"],"created_at":"2026-01-25T11:39:52.094Z","updated_at":"2026-01-25T11:39:52.797Z","avatar_url":"https://github.com/tomitribe.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"= Tribestream API Registry\n:url-openapi-spec: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md\n\nTribestream API Registry\n\n\n== Development\n\nTo build and run the registry in its own TomEE instance:\n\n----\n$ mvn clean package -DskipTests tomee-embedded:run -pl :tribestream-api-registry-webapp\n----\n\nTo make TomEE pick up changes to any static resources, typescript files, templates or style sheets:\n\n----\n$ cd tribestream-api-registry-webapp\n$ mvn frontend:npm@dev\n----\n\nNote that you can run elasticsearch with the dedicated plugin:\n\n[source]\n----\ncd tribestream-api-registry-webapp \u0026\u0026 mvn elasticsearch:run\n----\n\nIf you do so, ensure to skip the automatically launched one adding as system property: `-Ddev.elasticsearch=skip`.\n\n== API\n\nThe client uses these endpoints:\n\nGet a single application by id:\n\n----\nGET http://localhost:8080/registry/api/application/253a25ec-7c2c-4ca5-88f6-9cd115733f7c\n----\n\n[source,json]\n----\n{\n  \"swagger\":{\n    \"swagger\":\"2.0\",\n    \"paths\": {\n      \"/pets/{id}\": {\n        \"get\": {\n          \"description\": \"...\" \u003c1\u003e\n      }\n    },\n  }\n}\n----\n\u003c1\u003e The paths are reduced so that the operations only contain the properties `summary` and `description`\n    All other properties of an endpoint must be retrieved via the endpoint below.\n\nLinks are communicated in the vendor extension `x-tribestream-api-registry`:\n\n----\nLink: \u003chttp://localhost:8080/registry/api/application/253a25ec-7c2c-4ca5-88f6-9cd115733f7c\u003e;rel=\"self\"\nLink: \u003chttp://localhost:8080/registry/api/application/253a25ec-7c2c-4ca5-88f6-9cd115733f7c/endpoint/f27efad1-a6a2-4066-af4e-b50a0194f46a\u003e;rel=\"GET /pets\"\n{\n  \"swagger\":{\n    \"swagger\":\"2.0\",\n    \"paths\": {\n      \"/pets/{id}\": {\n        \"get\": {\n          \"description\": \"...\" \u003c1\u003e\n      }\n    },\n    \"x-tribestream-api-registry\": {\n      \"links\": [\n        {\n          \"rel\": \"self\",\n          \"href\": \"http://localhost:8080/registry/api/application/6f80ede5-5cd9-4c5a-aeb7-5cb3fb57f863\"\n        },\n        {\n          \"rel\": \"history\",\n          \"href\": \"http://localhost:8080/registry/api/history/application/6f80ede5-5cd9-4c5a-aeb7-5cb3fb57f863\"\n        },\n        {\n          \"rel\": \"endpoints\",\n          \"href\": \"http://localhost:8080/registry/api/application/6f80ede5-5cd9-4c5a-aeb7-5cb3fb57f863/endpoint\"\n        },\n        {\n          \"rel\": \"GET /pets/{id}\",\n          \"href\": \"http://localhost:8080/registry/api/application/6f80ede5-5cd9-4c5a-aeb7-5cb3fb57f863/endpoint/28631ade-1baf-4013-9e9e-86e48874315f\"\n        }\n      ]\n    }\n  }\n}\n----\n\nGet an endpoint of an application:\n\n----\nGET http://localhost:8080/registry/api/application/{applicationId}/endpoint/{endpointId}\n----\n\n\n[source,json]\n----\n{\n  \"httpMethod\":\"get\",\n  \"path\":\"/workNotifications/{region}/{function}\",\n  \"operation\":{\n    \"description\":\"....\",\n    \"consumes\":[\"application/xml\"],\n    \"produces\":[\"application/xml\"],\n    ...\n  }\n}\n----\n\nLinks for the endpoint point to the endpoint itself, its history and the application:\n\n----\n{\n  \"httpMethod\":\"get\",\n  \"path\":\"/workNotifications/{region}/{function}\",\n  \"operation\":{\n    \"description\":\"....\",\n    \"consumes\":[\"application/xml\"],\n    \"produces\":[\"application/xml\"],\n    ...\n    \"x-tribestream-api-registry\": {\n      \"links\": [\n        {\n          \"rel\": \"self\",\n          \"href\": \"http://localhost:8080/registry/api/application/6f80ede5-5cd9-4c5a-aeb7-5cb3fb57f863/endpoint/28631ade-1baf-4013-9e9e-86e48874315f\"\n        },\n        {\n          \"rel\": \"history\",\n          \"href\": \"http://localhost:8080/registry/api/history/application/6f80ede5-5cd9-4c5a-aeb7-5cb3fb57f863/endpoint/28631ade-1baf-4013-9e9e-86e48874315f\"\n        },\n        {\n          \"rel\": \"application\",\n          \"href\": \"http://localhost:8080/registry/api/application/6f80ede5-5cd9-4c5a-aeb7-5cb3fb57f863\"\n        }\n      ]\n    }\n  }\n}\n----\n\nImport an application:\n\n----\nPOST http://localhost:8080/registry/api/application/\n{\n  \"swagger\":{\n    \"swagger\":\"2.0\",\n    \"paths\": {\n      \"/pets/{id}\": {\n        \"get\": {\n          \"description\": \"...\",\n          \"params\": []\n      }\n    },\n  },\n}\n----\n\n[source,json]\n----\n{\n  \"swagger\":{\n    \"swagger\":\"2.0\",\n    \"paths\": {\n      \"/pets/{id}\": {\n        \"get\": {\n          \"description\": \"...\" \u003c1\u003e\n      }\n    },\n  }\n}\n----\n\u003c1\u003e The paths are reduced so that the operations only contain the properties `summary` and `description`\n    All other properties of an endpoint must be retrieved via the endpoint below.\n\nThe link for the new application is also communicated in the vendor extension.\n\nUpdate an application:\n\n----\nPUT http://localhost:8080/registry/api/application/253a25ec-7c2c-4ca5-88f6-9cd115733f7c\n{\n  \"swagger\":{\n    \"info\": {\n      \"title\": \"New Petstore\"\n    }\n  }\n}\n----\n\n[source,json]\n----\n{\n  \"swagger\":{\n    \"swagger\":\"2.0\",\n    \"paths\": {\n      \"/pets/{id}\": {\n        \"get\": {\n          \"description\": \"...\" \u003c1\u003e\n      }\n    },\n  },\n  \"_links\":{\n    \"self\":\"http://localhost:8080/registry/api/application/253a25ec-7c2c-4ca5-88f6-9cd115733f7c\",\n    \"GET /pets\":\"http://localhost:8080/registry/api/application/253a25ec-7c2c-4ca5-88f6-9cd115733f7c/endpoint/f27efad1-a6a2-4066-af4e-b50a0194f46a\"\n  }\n}\n----\n\n\nDelete an application:\n\n----\nDELETE http://localhost:8080/registry/api/application/253a25ec-7c2c-4ca5-88f6-9cd115733f7c\n----\n\nSearch endpoints by multiple criteria\n\n----\nGET http://localhost:8080/registry/api/registry\n        ?tag=tagA\n        \u0026category=catA\n        \u0026role=roleA\n        \u0026app=myApp\n        \u0026page=0\n        \u0026count=20\n----\n\n\n[source,json]\n----\n{\n  \"results\":[\n    {\n      \"applicationId\":\"1b281178-c381-4437-b101-a441ef508e79\",\n      \"endpointId\":\"518f5b5e-f964-4311-8b47-ad99019a2fa8\",\n      \"application\":\"Uber API\",\n      \"applicationVersion\":\"1.0.0\",\n      \"httpMethod\":\"GET\",\n      \"path\":\"/estimates/price\",\n      \"description\":\"Price Estimates\",\n      \"consumes\":[],\n      \"produces\":[],\n      \"secured\":false,\n      \"rateLimited\":false,\n      \"score\":2.5073297\n    },\n  ],\n  \"applications\":[\n    {\"text\":\"/v1\",\"weight\":2}\n  ],\n  \"categories\":[],\n  \"tags\":[\n    {\"text\":\"Estimates\",\"weight\":2}\n  ],\n  \"roles\":[],\n  \"total\":2,\n  \"current\":0}\n----\n\n\nCreate an endpoint\n\n----\nPOST http://localhost:8080/registry/api/application/253a25ec-7c2c-4ca5-88f6-9cd115733f7c/endpoint\n{\n  \"httpMethod\":\"get\",\n  \"path\":\"/workNotifications/{region}/{function}\",\n  \"operation\":{\n    \"description\":\"....\",\n    \"consumes\":[\"application/xml\"],\n    \"produces\":[\"application/xml\"],\n    ...\n  }\n}\n----\n\nThe response status will be HTTP 201\n\n----\n{\n  \"httpMethod\":\"get\",\n  \"path\":\"/workNotifications/{region}/{function}\",\n  \"operation\":{\n    \"description\":\"....\",\n    \"consumes\":[\"application/xml\"],\n    \"produces\":[\"application/xml\"],\n    ...\n  }\n}\n----\n\n\nFor applications and endpoints a revision log will be managed.\nThis allows to review past changes.\n\nThe revision log for an application is available via the `history` link that is returned when getting an application or an endpoint.\nIn general the history is available under the history resource:\n\n----\nGET http://localhost:8080/registry/api/history/application/253a25ec-7c2c-4ca5-88f6-9cd115733f7c\n----\n\nThe response contains a list of revision information:\n\n[source,json]\n----\n[\n  {\n    \"revisionId\": 9,\n    \"timestamp\": 1474532005121,\n    \"username\": \"admin\",\n    \"revisionType\": \"MOD\"\n  },\n  {\n    \"revisionId\": 7,\n    \"timestamp\": 1474531974419,\n    \"username\": \"admin\",\n    \"revisionType\": \"MOD\"\n  },\n  {\n    \"revisionId\": 1,\n    \"timestamp\": 1474531938316,\n    \"revisionType\": \"ADD\"\n  }\n]\n----\n\nThe log is sorted by revision id in descending order, that is the latest revisions appear first.\nPlease note that revision ids need not be consecutive!\n\nThe timestamp contains the milliseconds since January, 1st 1970.\n\nThe revision type can be one of the three strings `ADD`, `MOD` or `DEL`.\n\nThe history resource supports pagination.\nThe page to fetch can be specified via the `page` query parameter.\nPages are 1-based, that is the first page is available via the `page` parameter `1`\nThe page size can be specified via the `per_page` query parameter.\nThe default page size is `20`.\n\nFor each revision `n` presented in the result, the response contains one link `revision n`.\nIn general the URL will look like this to get revision 7 from the example above:\n\n----\nGET http://localhost:8080/registry/api/history/application/253a25ec-7c2c-4ca5-88f6-9cd115733f7c/7\n----\n\n\nRevision logs for endpoints can be retrieved in a similar fashion:\n\n----\nGET http://localhost:8080/registry/api/history/application/253a25ec-7c2c-4ca5-88f6-9cd115733f7c/endpoint/f27efad1-a6a2-4066-af4e-b50a0194f46a\n----\n\nA certain revision of an endpoint can be obtained in a similar way as a historic application:\n\n----\nGET http://localhost:8080/registry/api/history/application/253a25ec-7c2c-4ca5-88f6-9cd115733f7c/endpoint/f27efad1-a6a2-4066-af4e-b50a0194f46a/7\n----\n\n=== Tribestream API Registry vendor extension\n\nProperties that are not defined as part of the {url-openapi-spec}[OpenAPI specification] are stored in a vendor extension.\n\n==== Operation extension\n\n\n[source,json]\n----\n{\n  \"swagger\": \"2.0\",\n  \"info\": {},\n  \"paths\": {\n    \"pets\": {\n      \"get\": {\n        \"description\": \"...\"\n        \"x-tribestream-api-registry\": {\n          \"status\": \"ACCEPTED\",\n          \"categories\": [\"mammals\"],\n          \"roles\": [\"roleA\", \"roleB\"],\n          \"auth-methods\": [\"HTTP Signatures\", \"Bearer\"],\n          \"api-versions\": \"0.1\",\n          \"endpoint-protocol\": \"https\",\n          \"request-parameters\": \"```GET /pets\\nhost: host.com\\nAccept: application/xml```\",\n          \"response-parameters\": \"```HTTP/1.1 200 OK\\nContent-Type: application/xml```\",\n          \"example-response\": \"```xml\u003celem\u003e...\u003c/elem\u003e```\",\n          \"example-error-response\": \"```xml\u003celem\u003e...\u003c/elem\u003e```\",\n          \"rates\": [\n            {\n              \"rateLimit\":2,\n              \"rateWindow\":7,\n              \"rateUnit\":\"MINUTES\",\n              \"description\":\"Two requests in seven minutes.\"\n            }\n          ],\n          \"sees\":[\n            {\"href\":\"http://swagger.io\"},\n            {\"href\":\"http://tomitribe.com\"}\n          ]\n        }\n      }\n    }\n  }\n}\n----\n\n=== OAuth2 authentication\n\nThe Tribestream API Registry supports authentication via OAuth2 by passing the user credentials to a OAuth2 authorization server.\nTherefore the connection to the OAuth2 server has to be configured with these properties:\n\n`registry.oauth2.authorizationServerUrl`::\n    URL of the authorization server. For example: `https://myauthhost/user/oauth/token`.\n\n`registry.oauth2.clientId`::\n    A client id used to authenticate the Tribestream API Registry server application if required.\n    For example `tribestream-api-registry`\n\n`registry.oauth2.clientSecret`::\n    If the Tribestream API Registry has to authenticate with a client id and a client secret this property contains the secret.\n    For example `very_secret!`.\n\n`registry.oauth2.tlsProtocol`\n    The TLS protocol to be used to connect to the OAuth2 server.\n    Possible values are available at http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#SSLContext[Java Cryptography Architecture Standard Algorithm Name Documentation].\n    The default is `TLSv1.2`.\n\n`registry.oauth2.tlsProvider`::\n    Configures the name of the Security provider.\n    This could be for example `SunJCE`.\n\n`registry.oauth2.trustStore`::\n    File name of a TLS trust store.\n\n`registry.oauth2.trustStoreType`::\n    The type of the trust store.\n    This could be for example `jceks`, `jks` or `pkcs12`.\n\nTo start the Tribestream API Registry with the TomEE Maven plugin that authenticates against your OAuth2 server pass you can pass the above properties to Maven:\n\n```\nmvn tomee-embedded:run -pl :tribestream-api-registry-webapp -Dregistry.oauth2.authorizationServerUrl=https://tribe.tomitribe.com/user/oauth/token\n```\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomitribe%2Ftribestream-api-registry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftomitribe%2Ftribestream-api-registry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomitribe%2Ftribestream-api-registry/lists"}