...
- Infrastructure
- The API-X framework shall be deployable on a separate host from Fedora
- HTTP requests routed to these instance(s) before being forwarded to their ultimate destination (Fedora, backend service, etc)
- It shall be possible to deploy multiple instances of the API-X framework for the sake of scalability of high availability
- The framework shall allow extensions to be hot deployable, configurable, and removable at runtime
- Extension services are exposed as HTTP endpoints
- API-X shall provide a specification that extensions will implement in order to support high level requirements such as service discovery, binding, etc
- Patterns
- API-X shall support a filtering pattern in extensions, where an HTTP request to an existing Fedora URI (or response) is routed through an extension and possibly modified in the process
- The extension is free to do whatever it wants to the request, including route it to an alternate destination, or respond directly
- API-X shall support exposing new URIs associated with individual repository resources, bound to individual extensions
- API-X shall support exposing URIs associated with the global repository a whole, bound to individual extensions
- APi-X shall support a proxy pattern in extensions, where requests to a URI exposed by an extension are proxied to some other web service
- This can also be seen as implicitly URL rewriting
- API-X shall support a filtering pattern in extensions, where an HTTP request to an existing Fedora URI (or response) is routed through an extension and possibly modified in the process
- Service Discovery & Binding
- It shall be possible to enumerate the list of all extensions deployed and active within the framework
- It shall be possible to enumerate the list of extensions that provide services on a given object in the repository
- For any given object in the repository, it shall be possible to enumerate all URIs exposed by extensions
- API-X shall provide a mechanism for HTTP clients to discover all URIs exposed by extensions on a given object
- It shall be possible to bind extensions to all objects in the repository
- It shall be possible to bind extensions to specific objects in the repository, based on their rdf:type
...