It is possible to contribute a new endpoint to the API creating new web objects.
Thanks to WebEngine and its pluggability, we provided a way to add other root endpoints that benefit from the same infrastructure. It’s just a matter of providing a web object in another bundle, like the following one.
@WebObject(type="productRoot")
public class ProductRoot {
@GET
public List getProducts() throws ClientException {
ProductService ps = Framework.getLocalService(ProductService.class);
return ps.getAllProducts(getContext().getCoreSession());
}
@Path("{productId}")
public Object getProduct(@PathParam("productId") String productId) {
return newObject("product", productId);
}
}
This will expose two new APIs:
GET /nuxeo/api/v1/product
GET /nuxeo/api/v1/product/{productId}
Since Document Adapters are used as return types, the API will automatically benefit from the integrated adapter serializations (readers and writers). That means that it is very easy to build your own API, and that you inherit all the other pluggability mechanisms.