Apache CXF

Java

Аннотации

@Path - указывает относительный или абсолютный путь к данному ресурсу
@GET, @POST, @PUT, @DELETE (для методов) - отвечает за тип HTTP запроса релевантный этому методу
@Produces (для методов) - MIME-type отсылаемого запроса, если аннотации нет то метод void. "application/json" - JSON
@Consumes (для методов) - MIME-type принимаемого запроса, если аннотации нет то метод не принимает данные(для POST и PUT). "application/json" - JSON
@QueryParam (для параметров) - Позволяет получить доступ к переданным через URL-параметрам
@PathParam (для параметров)

Рекомендации для написания API

URL
POST /dogs — создать новую собаку
GET /dogs — получить список собак
PUT /dogs — редактирование всех собак сразу
DELETE /dogs — удаление всех собак

POST /dogs/12345 — вернуть ошибку (собака 12345 уже создана)
GET /dogs/12345 — показать информацию о собаке
PUT /dogs/12345 — редактировать собаку 12345
DELETE /dogs/12345 — удалить

Ошибки
Возможно только 3 варианта ответов API
Запрос прошел успешно
На вход были переданы неправильные данные — клиентская ошибка
Произошла ошибка при обработке данных — серверная ошибка

Так что можно взять за основу 3 кода ответов:
200 OK
400 Bad Request (некорректный запрос)
500 Internal server error (внутренняя ошибка сервера)

Если 3-х кодов вам недостаточно — возьмите еще 5:
201 Created (Запись создана)
304 Not Modified (Данные не изменились)
404 Not Found (Данные не найдены)
401 Unauthorized (Неавторизованный доступ)
403 Forbidden (Доступ запрещен)

Пример с использование Spring, JSON, Maven, Servlet

Зависимости необходимое для работы (pom.xml):

    <dependencies>
        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
 
        <!--Apache CXF-->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <version>2.7.6</version>
        </dependency>
 
        <!--Spring-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
 
        <!--JSON provider-->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-jaxrs</artifactId>
            <version>1.9.13</version>
        </dependency>
    </dependencies>

Сприноговый контекст (applicationContext.xml):
    <context:component-scan base-package="test.cxf"/>
    <bean id="jsonProvider" class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/>
 
    <bean id="menu" class="org.apache.cxf.jaxrs.JAXRSServerFactoryBean" init-method="create">
        <property name="address" value="/rest/"/>
        <property name="serviceBeans">
            <ref bean="beanServiceImpl"/>
        </property>
        <property name="provider">
            <ref bean="jsonProvider"/>
        </property>
    </bean>

Дескриптор развертывания (web.xml):
    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>
            org.apache.cxf.transport.servlet.CXFServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/cxf/*</url-pattern>
    </servlet-mapping>

Интерфейс для сервиса (BeanService.java):

package test.cxf;
 
import javax.ws.rs.*;
 
public interface BeanService
{
        @GET
        @Produces ("application/json")
        @Path ("test")
        Object getListTest ();
 
        @GET
        @Produces ("application/json")
        @Path ("test/{name}")
        Object getTest (@PathParam ("name")String name);
 
        @DELETE
        @Produces ("application/json")   //
        @Path ("test/{name}")
        Object deletetest (@PathParam ("name")String name);
 
        @POST
        @Consumes ("application/json")
        @Produces ("application/json")
        @Path ("test")
        Object addTest (BeanRequest beanRequest);
 
        @PUT
        @Produces ("application/json")
        @Consumes ("application/json")
        @Path ("test")
        Object editTest (@FormParam ("name")String name, @FormParam ("test")String test);
}

Реализация интерфейса сервиса (BeanServiceImpl.java):

package test.cxf;
 
import org.springframework.stereotype.Service;
 
import java.util.HashMap;
import java.util.Map;
 
@Service
public class BeanServiceImpl implements BeanService
{
    @Override
    public Object getListTest()
    {
        Map<String, String > map = new HashMap<>();
        map.put("test", "Hello World");
        return map;
    }
 
    @Override
    public Object getTest(String name)
    {
        String resp = "Your name: " + name;
        return resp ;
    }
}
Пока не указано иное, содержимое этой страницы распространяется по лицензии Creative Commons Attribution-ShareAlike 3.0 License