Статьи

Веб-сервисы RESTful с Java

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»

Скриншот 2013-11-07 17-06-05

    • Загрузите пакет Джерси на молнии отсюда . Версия Джерси, использованная в этих примерах, — 1.17.1. После того, как вы распакуете его, у вас будет каталог под названием «jersey-archive-1.17.1». Внутри найдите каталог lib. Скопируйте следующие jar-файлы и вставьте их в папку WEB-INF -> lib вашего проекта. Как только вы это сделаете, добавьте эти файлы в путь сборки вашего проекта.
      1. ASM-3.1.jar
      2. Джерси-клиент-1.17.1.jar
      3. Джерси-ядро-1.17.1.jar
      4. Джерси-сервер 1.17.1.jar
      5. Джерси-сервлет-1.17.1.jar
      6. jsr311-апи-1.1.1.jar

Снимок экрана 2013-11-08 02-54-15

Скриншот 2013-11-07 17-17-36

    • В вашем проекте внутри 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"?> 
  <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

Скриншот с 2013-11-08 02-04-07

выход

Скриншот 2013-11-08 03-09-57

Создание клиента

    • Создайте пакет с именем «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 BASE_URI = "http://localhost:8080/RESTfulWS";
 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 OK
Response
<User><Name>Pavithra</Name></User>
 
Client Response
GET http://localhost:8080/RESTfulWS/rest/UserInfoService/age/25 returned a response status of 200 OK
Response
<User><Age>25</Age></User>

Наслаждайтесь!

Ссылка: веб-службы RESTful с Java от нашего партнера JCG Павитры Сиривардены в блоге EVIAC .