/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.spi; import java.util.List; import org.apache.camel.Consumer; import org.apache.camel.Service; /** * A registry of all REST services running within the {@link org.apache.camel.CamelContext} which have been defined and created * using the <a href="http://camel.apache.org/rest-dsl">Rest DSL</a>. */ public interface RestRegistry extends Service { /** * Details about the REST service */ interface RestService { /** * Gets the consumer of the REST service */ Consumer getConsumer(); /** * Gets the state of the REST service (started, stopped, etc) */ String getState(); /** * Gets the absolute url to the REST service (baseUrl + uriTemplate) */ String getUrl(); /** * Gets the base url to the REST service */ String getBaseUrl(); /** * Gets the base path to the REST service */ String getBasePath(); /** * Gets the uri template */ String getUriTemplate(); /** * Gets the HTTP method (GET, POST, PUT etc) */ String getMethod(); /** * Optional details about what media-types the REST service accepts */ String getConsumes(); /** * Optional details about what media-types the REST service returns */ String getProduces(); /** * Optional detail about input binding to a FQN class name. * <p/> * If the input accepts a list, then <tt>List<class name></tt> is enclosed the name. */ String getInType(); /** * Optional detail about output binding to a FQN class name. * <p/> * If the output accepts a list, then <tt>List<class name></tt> is enclosed the name. */ String getOutType(); /** * Gets the id of the route this rest service will be using. */ String getRouteId(); /** * Optional description about this rest service. */ String getDescription(); } /** * Adds a new REST service to the registry. * * @param consumer the consumer * @param url the absolute url of the REST service * @param baseUrl the base url of the REST service * @param basePath the base path * @param uriTemplate the uri template * @param method the HTTP method * @param consumes optional details about what media-types the REST service accepts * @param produces optional details about what media-types the REST service returns * @param inType optional detail input binding to a FQN class name * @param outType optional detail output binding to a FQN class name * @param routeId the id of the route this rest service will be using * @param description optional description about the the service */ void addRestService(Consumer consumer, String url, String baseUrl, String basePath, String uriTemplate, String method, String consumes, String produces, String inType, String outType, String routeId, String description); /** * Removes the REST service from the registry * * @param consumer the consumer */ void removeRestService(Consumer consumer); /** * List all REST services from this registry. * * @return all the REST services */ List<RestService> listAllRestServices(); /** * Number of rest services in the registry. * * @return number of rest services in the registry. */ int size(); /** * Outputs the Rest services API documentation in JSon (requires camel-swagger-java on classpath) * * @return the API docs in JSon, or <tt>null</tt> if camel-swagger-java is not on classpath */ String apiDocAsJson(); }