Рубрики
Без рубрики

Руководство по спокойному отдыху

Краткое руководство по созданию REST API с помощью REST Easy.

Автор оригинала: baeldung.

1. введение

JAX-RS (Java API для веб-служб RESTful) – это набор Java API, который обеспечивает поддержку при создании REST API . И фреймворк хорошо использует аннотации для упрощения разработки и развертывания этих API.

В этом уроке мы будем использовать RESTEasy, предоставляемую JBoss портативную реализацию спецификации JAX-RS, для создания простых веб-служб RESTful.

2. Настройка проекта

Мы рассмотрим два возможных сценария:

  • Автономная настройка – предназначена для работы на каждом сервере приложений
  • JBoss КАК настройка – рассматривать только для развертывания в JBoss КАК

2.1. Автономная настройка

Давайте начнем с использования JBoss WildFly 10 с автономной настройкой.

JBoss WildFly 10 поставляется с версией RESTEasy 3.0.11, но, как вы увидите, мы настроим pom.xml с новой версией 3.0.14.

И благодаря resteasy-servlet-initializer , RESTEasy обеспечивает интеграцию с автономными Servlet 3.0 контейнерами через ServletContainerInitializer интерфейс интеграции.

Давайте взглянем на pom.xml :


    3.0.14.Final


    
        org.jboss.resteasy
        resteasy-servlet-initializer
        ${resteasy.version}
    
    
        org.jboss.resteasy
        resteasy-client
        ${resteasy.version}
    

Давайте взглянем на || pom.xml ||:

В JBoss все, что развертывается как WAR, JAR или EAR, является модулем. Эти модули называются динамическими модулями .

Помимо них, есть также некоторые статические модули в $JBOSS_HOME/modules . Поскольку у JBoss есть RESTEasy статические модули – для автономного развертывания, jboss-deployment-structure.xml является обязательным для того, чтобы исключить некоторые из них.

Таким образом, будут загружены все классы и JAR файлы, содержащиеся в нашем WAR :


    
        
            
        
        
            
            
            
        
        
    

2.2. JBoss как настройка

Если вы собираетесь запустить REST Easy с JBoss версии 6 или выше, вы можете выбрать использование библиотек, уже включенных в сервер приложений, что упростит pom:


    
        org.jboss.resteasy
        resteasy-jaxrs
        ${resteasy.version}
    

Обратите внимание, что jboss-deployment-structure.xml больше не требуется.

3. Код На стороне Сервера

3.1. Сервлет версии 3 web.xml

Давайте теперь быстро взглянем на web.xml о нашем простом проекте здесь:




   RestEasy Example

   
      resteasy.servlet.mapping.prefix
      /rest
   

resteasy.servlet.mapping.prefix необходим только в том случае, если вы хотите добавить относительный путь к приложению API.

На этом этапе очень важно заметить, что мы не объявили ни одного сервлета в web.xml потому что resteasy инициализатор сервлета был добавлен в качестве зависимости в pom.xml . Причина этого – RESTEasy предоставляет org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer класс, реализующий javax.server.ServletContainerInitializer .

ServletContainerInitializer – это инициализатор, и он выполняется до того, как любой контекст сервлета будет готов-вы можете использовать этот инициализатор для определения сервлетов, фильтров или прослушивателей для вашего приложения.

3.2. Класс Приложения

Ядро javax.ws.rs.Класс Application – это стандартный класс JAX-RS, который можно реализовать для предоставления информации о развертывании:

@ApplicationPath("/rest")
public class RestEasyServices extends Application {

    private Set singletons = new HashSet();

    public RestEasyServices() {
        singletons.add(new MovieCrudService());
    }

    @Override
    public Set getSingletons() {
        return singletons;
    }
}

Как вы можете видеть – это просто класс, в котором перечислены все корневые ресурсы и поставщики JAX-RS, и он аннотирован аннотацией @ApplicationPath .

Если вы вернете любой пустой набор для классов и синглетов, ВОЙНА будет проверена на наличие классов ресурсов и поставщиков аннотаций JAX-RS.

3.3. Класс реализации Услуг

Наконец, давайте посмотрим на фактическое определение API здесь:

@Path("/movies")
public class MovieCrudService {

    private Map inventory = new HashMap();

    @GET
    @Path("/getinfo")
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public Movie movieByImdbId(@QueryParam("imdbId") String imdbId) {
        if (inventory.containsKey(imdbId)) {
            return inventory.get(imdbId);
        } else {
            return null;
        }
    }

    @POST
    @Path("/addmovie")
    @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public Response addMovie(Movie movie) {
        if (null != inventory.get(movie.getImdbId())) {
            return Response
              .status(Response.Status.NOT_MODIFIED)
              .entity("Movie is Already in the database.").build();
        }

        inventory.put(movie.getImdbId(), movie);
        return Response.status(Response.Status.CREATED).build();
    }
}

4. Выводы

В этом кратком руководстве мы представили REST Easy и создали с его помощью супер простой API.

Пример, используемый в этой статье, доступен в качестве примера проекта в GitHub .