Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RESTful веб-сервисы: Обработка HTTP запросов. 
:(
    Опции темы
powerOn
Дата 5.1.2009, 20:44 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Обработка HTTP запросов с помощью RESTful веб-сервисов.

В первой статье (RESTful веб-сервисы: Создание простого сервиса, с помощью JAX-RS и Mаven) был проведен небольшой обзор RESTful веб-сервисов, а так же показан пример создания простого сервиса с помощью стека Jersey и Maven2. В данной статье мы коснемся вопросов обработки HTTP запросов.

 Аннотации и обработчики
Обработка основных HTTP запросов с помощью RESTful сервисов делается необычайно просто: достаточно создать метод и пометить его соответствующей аннотацией (которые называются как "resource method designator" (указатель на метод ресурса)). Jersey поддерживает следующие аннотации для назначения обработчиков http запроса:
  • @GET
  • @POST
  • @DELETE
  • @PUT
  • @HEAD
Имя каждого из них говорит само за себя. В сочетании с аннотацией @Path существует возможность связывать обработчики запросов с URI. Давайте рассмотрим несколько примеров применения этих аннотаций:

 Использование @GET и @POST

Код

package com.mycompany;

import java.util.logging.Logger;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;

@Path("simpleservice")
public class SimpleService
{
    @Context
    private UriInfo uriInfo;
    private final Logger logger = Logger.getLogger(SimpleService.class.getName());

    @GET
    @Path("getresource")
    @Produces("text/plain")
    public String myGetHandler(@QueryParam("message") String message)
    {
        logger.info(uriInfo.getAbsolutePath().toString());
        return "GET " + message;
    }

    @POST
    @Path("postresource")
    @Consumes("text/plain")
    public void myPostHandler(String message)
    {
        logger.info(uriInfo.getAbsolutePath().toString());
        logger.info("message: " + message);
    }
}


Осуществить запрос к данному сервису можно используя методы GET и POST. В первом случае URL будет выглядеть как:
Цитата
http://localhost:8080/myrestfulapp/webresources/simpleservice/getresource?message=Some message here!

А во втором, для POST запроса, так:
Цитата
http://localhost:8080/myrestfulapp/webresources/simpleservice/postresource

Следует отметить, что для успешной обработки MIME тип у POST запроса должен быть text/plain, иначе сервер вернет ошибку HTTP Status 415. Контент запроса будет передан в метод в качестве параметра. так же обратите внимание на используемый в коде объект класса UriInfo. Он автоматически инжектируется окружением и служит для получения информации об URI, по которому происходит обработка запроса.

Использование @HEAD

HEAD запрос так же можно обрабатывать с помощью RESTful сервиса. Но его обработчики не так часто используются как для GET и POST. Обычно HEAD запрос применяется для извлечения метаданных или проверки наличия ресурса, при этом клиенту отправляется только заголовок ответа (без его тела).  Интересным фактом, является то, что если явно не создавать метод обработчик c аннотацией @HEAD, то будет использоваться обработчик @GET запроса, но в ответ будет отправлен только заголовок – тело будет проигнорировано.
Код

    @HEAD
    @Path("getresource")
    public Response myHeadHandler()
    {
        ResponseBuilder okResponseBuilder = Response.ok();
        okResponseBuilder.lastModified(Calendar.getInstance().getTime());
        return okResponseBuilder.build();
    }


На этом всё. Получить информацию об остальных обработчиках можно обратившись к официальной документации по JAX-RS (JSR-311). 

Ссылки на ресурсы используемые при написании статьи:
Jersey Home - домашняя страница проекта Jersey.
RESTful Web Services - обзор RESTful веб-сервисов на java.sun.com.
JSR 311: JAX-RS: The JavaTM API for RESTful Web Services - спецификация JAX-RS 1.0.
RESTful Web Services Developer's Guide - руководство разработчика.

Это сообщение отредактировал(а) powerOn - 5.1.2009, 21:07


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Foror
Дата 6.1.2009, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 14.2.2004

Репутация: 1
Всего: 2



Код

@DELETE
@PUT
@HEAD


Вот это сомнительные команды. Думаю @POST и @GET более чем достаточно. На хабре, кстати, было обсуждение на эту тему.


--------------------
Разработка веб-сайтов и создание интернет магазина
PM MAIL WWW ICQ   Вверх
powerOn
Дата 6.1.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Тут подход такой: в REST стиле HTTP методы отлично мапятся на СRUD методы, который типично реализуются в remote facade. Т.е.
Create - POST.
Read - GET.
Update - PUT.
Delete - DELETE.

Реализуя методы таким образом, легко ориентироваться в обработчиках операций.





--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1024 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.