From c50f0f8a1d665d9efd0bf2ffbd4dd7d68280cf34 Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Mon, 23 Jan 2012 14:33:20 +0000 Subject: [PATCH] complete REST documentation git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1234821 13f79535-47bb-0310-9956-ffa450edef68 --- .../archiva-webapp-js/src/site/apt/rest.apt | 48 +++++++++++++++++-- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/archiva-modules/archiva-web/archiva-webapp-js/src/site/apt/rest.apt b/archiva-modules/archiva-web/archiva-webapp-js/src/site/apt/rest.apt index 8169dbde6..5472b3863 100644 --- a/archiva-modules/archiva-web/archiva-webapp-js/src/site/apt/rest.apt +++ b/archiva-modules/archiva-web/archiva-webapp-js/src/site/apt/rest.apt @@ -1,5 +1,5 @@ ----- - REST call + REST Services ----- Olivier Lamy ----- @@ -28,7 +28,8 @@ Expose Rest Services - The {{http://cxf.apache.org}Apache CXF}} is used to expose some classes/methods as REST Services. + + The {{{http://cxf.apache.org}Apache CXF}} is used to expose some classes/methods as REST Services. Services use the standard interface/implementation pattern: @@ -38,9 +39,23 @@ Expose Rest Services [] -* Annotations +%{toc} + +* Steps to expose your class as a REST Service. + + Here all the steps to expose a new class as a REST service. + +** Interface and data beans + + All interfaces and data beans are added in the module archiva-rest-api: + + * interface in the package: org.apache.archiva.rest.api.services . -** Beans + * data beans in the package: org.apache.archiva.rest.api.model . + + [] + +*** Beans As we want to be able to expose result as json or xml type, all beans use javax.xml.bind.annotation root element : @@ -48,9 +63,12 @@ Expose Rest Services @XmlRootElement( name = "artifact" ) public class Artifact implements Serializable + +All services will be able to return json or xml +@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) +--------------------- -** JAXRS annotations +*** JAXRS annotations As we use interfaces/implementations pattern jaxrs annotations are only in interfaces level. @@ -58,11 +76,29 @@ public class Artifact @Path( "/managedRepositoriesService/" ) public interface ManagedRepositoriesService { + // simple GET method no parameter @Path( "getManagedRepositories" ) @GET @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) List getManagedRepositories() throws ArchivaRestServiceException; + + // GET method with a path parameter + @Path( "getManagedRepository/{repositoryId}" ) + @GET + @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) + @RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) + ManagedRepository getManagedRepository( @PathParam( "repositoryId" ) String repositoryId ) + throws ArchivaRestServiceException; + + // POST method to pass a data bean + @Path( "addManagedRepository" ) + @POST + @Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) + @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } ) + @RedbackAuthorization( permissions = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION ) + ManagedRepository addManagedRepository( ManagedRepository managedRepository ) + throws ArchivaRestServiceException; +--------------------- ** CXF/Spring configuration @@ -124,3 +160,5 @@ public class DefaultManagedRepositoriesService + + -- 2.39.5