- Infrastructure Deployment
- The API-X framework shall be deployable on a separate host from Fedora
- HTTP requests from the outside world are routed to these instance(s) before being forwarded to their ultimate destination (Fedora, backend service, etc)
- The API-X framework shall be deployable within the same container as a Fedora instance
- The API-X framework shall be deployable as an extension to Fedora
- This would allow standalone Fedora installs to deploy API-X extensions within them
- It shall be possible to deploy multiple instances of the API-X framework for the sake of scalability of high availability
- The API-X framework shall be deployable as OSGi bundles
- The API-X framework will be available as a Karaf Feature, for ease of deployment into Apache Karaf
- The API-X framework shall be deployable on a separate host from Fedora
- Extension Deployment
- Individual extensions shall be deployable as OSGi bundles
- Instances of extensions shall be hot deployable and removable at runtime
- API-X shall allow configuration of extensions through OSGi's own ConfigurationAdmin service
- Creating multiple instances of extensions via ConfgurationAdmin factory pattern shall be allowable
- i.e separately configured instances of extensions may be created via means defined by OSGi.
- 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