REST расшифровывается как REpresentational State Transfer. Впервые он был представлен Роем Филдингом в своей диссертации «Архитектурные стили и проектирование сетевых программных архитектур» в 2000 году.
ОТДЫХ — это архитектурный стиль. HTTP — это протокол, который содержит набор архитектурных ограничений REST.
REST основы
- Все в REST рассматривается как ресурс.
- Каждый ресурс идентифицируется URI.
- Использует единые интерфейсы. Ресурсы обрабатываются с использованием операций POST, GET, PUT, DELETE, которые аналогичны операциям Create, Read, update и Delete (CRUD).
- Быть без гражданства. Каждый запрос является независимым запросом. Каждый запрос от клиента к серверу должен содержать всю информацию, необходимую для понимания запроса.
- Связь осуществляется через представительства. Например, XML, JSON
Веб-сервисы RESTful
Веб-службы RESTful широко используются в Интернете как альтернатива веб-службам на основе SOAP благодаря своей простоте. В этом посте будет показано, как создать веб-службу RESTful и клиент с использованием инфраструктуры Jersey, которая расширяет API JAX-RS. Примеры выполняются с использованием Eclipse IDE и Java SE 6.
Создание веб-службы RESTful
- В Eclipse создайте новый динамический веб-проект под названием «RESTfulWS»
- Загрузите пакет Джерси на молнии отсюда . Версия Джерси, использованная в этих примерах, — 1.17.1. После того, как вы распакуете его, у вас будет каталог под названием «jersey-archive-1.17.1». Внутри найдите каталог lib. Скопируйте следующие jar-файлы и вставьте их в папку WEB-INF -> lib вашего проекта. Как только вы это сделаете, добавьте эти файлы в путь сборки вашего проекта.
- ASM-3.1.jar
- Джерси-клиент-1.17.1.jar
- Джерси-ядро-1.17.1.jar
- Джерси-сервер 1.17.1.jar
- Джерси-сервлет-1.17.1.jar
- jsr311-апи-1.1.1.jar
- В вашем проекте внутри Java Resources -> src создайте новый пакет под названием «com.eviac.blog.restws». Внутри него создайте новый класс Java под названием «UserInfo». Также включите данный файл web.xml в папку WEB-INF.
UserInfo.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package com.eviac.blog.restws;import javax.ws.rs.GET;import javax.ws.rs.Path;import javax.ws.rs.PathParam;import javax.ws.rs.Produces;import javax.ws.rs.core.MediaType;/** * * @author pavithra * */// @Path here defines class level path. Identifies the URI path that // a resource class will serve requests for.@Path("UserInfoService")public class UserInfo { // @GET here defines, this method will method will process HTTP GET // requests. @GET // @Path here defines method level path. Identifies the URI path that a // resource class method will serve requests for. @Path("/name/{i}") // @Produces here defines the media type(s) that the methods // of a resource class can produce. @Produces(MediaType.TEXT_XML) // @PathParam injects the value of URI parameter that defined in @Path // expression, into the method. public String userName(@PathParam("i") String i) { String name = i; return "<User>" + "<Name>" + name + "</Name>" + "</User>"; } @GET @Path("/age/{j}") @Produces(MediaType.TEXT_XML) public String userAge(@PathParam("j") int j) { int age = j; return "<User>" + "<Age>" + age + "</Age>" + "</User>"; }} |
web.xml
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>RESTfulWS</display-name> <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>com.eviac.blog.restws</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app> |
- Чтобы запустить проект, щелкните по нему правой кнопкой мыши и выберите «запустить как -> запустить на сервере».
- Выполните следующий URL в вашем браузере, и вы увидите результат.
1
http://localhost:8080/RESTfulWS/rest/UserInfoService/name/Pavithra
выход
Создание клиента
- Создайте пакет с именем «com.eviac.blog.restclient». Внутри него создайте класс Java с именем «UserInfoClient».
UserInfoClient.java
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
package com.eviac.blog.restclient;import javax.ws.rs.core.MediaType;import com.sun.jersey.api.client.Client;import com.sun.jersey.api.client.ClientResponse;import com.sun.jersey.api.client.WebResource;import com.sun.jersey.api.client.config.ClientConfig;import com.sun.jersey.api.client.config.DefaultClientConfig;/** * * @author pavithra * */public class UserInfoClient { public static final String PATH_NAME = "/UserInfoService/name/"; public static final String PATH_AGE = "/UserInfoService/age/"; public static void main(String[] args) { String name = "Pavithra"; int age = 25; ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); WebResource resource = client.resource(BASE_URI); WebResource nameResource = resource.path("rest").path(PATH_NAME + name); System.out.println("Client Response \n" + getClientResponse(nameResource)); System.out.println("Response \n" + getResponse(nameResource) + "\n\n"); WebResource ageResource = resource.path("rest").path(PATH_AGE + age); System.out.println("Client Response \n" + getClientResponse(ageResource)); System.out.println("Response \n" + getResponse(ageResource)); } /** * Returns client response. * e.g : * returned a response status of 200 OK * * @param service * @return */ private static String getClientResponse(WebResource resource) { return resource.accept(MediaType.TEXT_XML).get(ClientResponse.class) .toString(); } /** * Returns the response as XML * e.g : <User><Name>Pavithra</Name></User> * * @param service * @return */ private static String getResponse(WebResource resource) { return resource.accept(MediaType.TEXT_XML).get(String.class); }} |
- После запуска клиентской программы вы получите следующий вывод.
|
1
2
3
4
5
6
7
8
9
|
Client Response GET http://localhost:8080/RESTfulWS/rest/UserInfoService/name/Pavithra returned a response status of 200 OKResponse <User><Name>Pavithra</Name></User>Client Response GET http://localhost:8080/RESTfulWS/rest/UserInfoService/age/25 returned a response status of 200 OKResponse <User><Age>25</Age></User> |
Наслаждайтесь!
Ссылка: веб-службы RESTful с Java от нашего партнера JCG Павитры Сиривардены в блоге EVIAC .




