java RertFlはhttpインターフェースのサービスとクライアントを実現します。
12652 ワード
RESTはREpresentational State Transferの略語です。2000年Roy Fielding博士の論文「Architectural Style and the Design of Network-based Software Architectures」にRESTを提出しました。
RESTは体系構造である。HTTPはRESTアーキテクチャ属性を含むプロトコルである。
1.REST基礎概念
RESTではすべてのものが資源とみなされます。各リソースはURIと対応しています。RESTでは、統一インターフェースを用いてリソースを処理する。データベースCRUD操作(Create、Read、Update、Delete)と同様に、RESTリソースをPOST、GET、PUT、DELETEで処理することができます。各REST要求は孤立しており、要求には必要なすべての情報が含まれている。RESTサービス側は格納状態ではない。RESTは、XML、JSONなど、異なる通信データフォーマットをサポートしています。RESTful Web Services
RESTful Web Servicesはその簡単さのために広く使われています。SOAPよりも簡単です。本稿では、どのようにJerseyフレームを使ってRESTful Web Servicesを作成するかを重点的に紹介します。JerseyフレームはJAX-RSインターフェースを実現しました。本明細書の例示的なコードはEclipseとJava SE 6を用いて作成される。
2.RESTful Webサービスの作成
Eclipseで「dynamic web project」(動的webプロジェクト)を作成し、プロジェクト名を「RESTfulWS」とします。
ここからJerseyをダウンロードします。コード例はJersey 1.17.1を使用しています。まず、Jerseyから「jrsey-archive-1.17.1」フォルダを解凍します。次に中のlibフォルダの下のjarファイルをプロジェクトディレクトリのWEB-INF->libにコピーします。その後、それらをbuild pathに追加します。asm-3.1.jar jerey-client-1.17.1.jar jrsey-coree-1.17.1.jar jrsey-server-1.17.1.jar jrsey-servlet-1.17.1.jar jsr 311-appi-1.1.11.jarはプロジェクトJava Resource-srce->srcで「comp.service.service.」を作成します。最後にweb.xmlをWEB-INFディレクトリにコピーします。
UserInfo.java
import javax.ws.s.s.GET;import javax.ws.rs.Path;import javax.ws.rs.PathPaam;import javax.ws.s.rs.Produces;import javax.ws.s.com re.MediaType;
//**@author pavithra*/
//ここ@Pathはクラスの階層パスを定義しています。//リソースクラスがサービスを提供するURIパスを指定しました。@Path(「UserInfoService」)pblic class UserInfo{
//@GETは、メソッドがHTTP GET要求@GET/ここ@Pathによってクラスの階層パスを定義したものを処理します。リソースクラスがサービスを提供するURIパスを指定しました。@Path(「/name/{i}」/@Producesは、リソースクラスの方法で生成されるメディアタイプを定義している。Produces(MediaType.TEXT_XML)/@PathParamは@Pathに定義された表現にURIパラメータ値を注入する。public String userName(@PathParam(“i”)String i){
String name=ireturn"+"+"+name+""+"""";
@GET@Path('/age/{j])@Produces(MediaType.TEXT_XML)public String userAge(@PathParam("j")int j){
int age=jreturn"+"+"+age+""+""""""";}
web.xml
出力結果は以下の通りです。
クライアントを作成
「come.eviac.blog.restclient」パッケージを作成し、「UserInfoClient」クラスを新設します。
UserInfoClient.java
原文リンク:eviac翻訳:ImportNew.com-陳潔訳文リンク:http://www.importnew.com/7336.html
RESTは体系構造である。HTTPはRESTアーキテクチャ属性を含むプロトコルである。
1.REST基礎概念
RESTではすべてのものが資源とみなされます。各リソースはURIと対応しています。RESTでは、統一インターフェースを用いてリソースを処理する。データベースCRUD操作(Create、Read、Update、Delete)と同様に、RESTリソースをPOST、GET、PUT、DELETEで処理することができます。各REST要求は孤立しており、要求には必要なすべての情報が含まれている。RESTサービス側は格納状態ではない。RESTは、XML、JSONなど、異なる通信データフォーマットをサポートしています。RESTful Web Services
RESTful Web Servicesはその簡単さのために広く使われています。SOAPよりも簡単です。本稿では、どのようにJerseyフレームを使ってRESTful Web Servicesを作成するかを重点的に紹介します。JerseyフレームはJAX-RSインターフェースを実現しました。本明細書の例示的なコードはEclipseとJava SE 6を用いて作成される。
2.RESTful Webサービスの作成
Eclipseで「dynamic web project」(動的webプロジェクト)を作成し、プロジェクト名を「RESTfulWS」とします。
ここからJerseyをダウンロードします。コード例はJersey 1.17.1を使用しています。まず、Jerseyから「jrsey-archive-1.17.1」フォルダを解凍します。次に中のlibフォルダの下のjarファイルをプロジェクトディレクトリのWEB-INF->libにコピーします。その後、それらをbuild pathに追加します。asm-3.1.jar jerey-client-1.17.1.jar jrsey-coree-1.17.1.jar jrsey-server-1.17.1.jar jrsey-servlet-1.17.1.jar jsr 311-appi-1.1.11.jarはプロジェクトJava Resource-srce->srcで「comp.service.service.」を作成します。最後にweb.xmlをWEB-INFディレクトリにコピーします。
UserInfo.java
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 。
// URI 。
@Path("UserInfoService")
public class UserInfo {
// @GET HTTP GET
@GET
// @Path 。 URI 。
@Path("/name/{i}")
// @Produces 。
@Produces(MediaType.TEXT_XML)
// @PathParam @Path URI 。
public String userName(@PathParam("i") String i) {
String name = i;
return "" + "" + name + "" + "";
}
@GET
@Path("/age/{j}")
@Produces(MediaType.TEXT_XML)
public String userAge(@PathParam("j") int j) {
int age = j;
return "" + "" + age + "" + "";
}
}
package come.eviac.blog.rests;import javax.ws.s.s.GET;import javax.ws.rs.Path;import javax.ws.rs.PathPaam;import javax.ws.s.rs.Produces;import javax.ws.s.com re.MediaType;
//**@author pavithra*/
//ここ@Pathはクラスの階層パスを定義しています。//リソースクラスがサービスを提供するURIパスを指定しました。@Path(「UserInfoService」)pblic class UserInfo{
//@GETは、メソッドがHTTP GET要求@GET/ここ@Pathによってクラスの階層パスを定義したものを処理します。リソースクラスがサービスを提供するURIパスを指定しました。@Path(「/name/{i}」/@Producesは、リソースクラスの方法で生成されるメディアタイプを定義している。Produces(MediaType.TEXT_XML)/@PathParamは@Pathに定義された表現にURIパラメータ値を注入する。public String userName(@PathParam(“i”)String i){
String name=ireturn"+"+"+name+""+"""";
@GET@Path('/age/{j])@Produces(MediaType.TEXT_XML)public String userAge(@PathParam("j")int j){
int age=jreturn"+"+"+age+""+""""""";}
web.xml
<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">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"a> id="WebApp_ID" version="2.5">
<display-name>RESTfulWSdisplay-name>
<servlet>
<servlet-name>Jersey REST Serviceservlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainerservlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packagesparam-name>
<param-value>com.eviac.blog.restwsparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>Jersey REST Serviceservlet-name>
<url-pattern>/rest/*url-pattern>
servlet-mapping>
web-app>
このURLをブラウザのアドレスバーにコピーして実行します。http://localhost:8080/RESTfulWS/rest/UserInfoService/name/Pavithra 出力結果は以下の通りです。
クライアントを作成
「come.eviac.blog.restclient」パッケージを作成し、「UserInfoClient」クラスを新設します。
UserInfoClient.java
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
"
+ getClientResponse(nameResource));
System.out.println("Response
" + getResponse(nameResource) + "
");
WebResource ageResource = resource.path("rest").path(PATH_AGE + age);
System.out.println("Client Response
"
+ getClientResponse(ageResource));
System.out.println("Response
" + getResponse(ageResource));
}
/**
* 。
* :
* GET http://localhost:8080/RESTfulWS/rest/UserInfoService/name/Pavithra
* “200 OK”。
*
* @param service
* @return
*/
private static String getClientResponse(WebResource resource) {
return resource.accept(MediaType.TEXT_XML).get(ClientResponse.class)
.toString();
}
/**
* XML
* :Pavithra
*
* @param service
* @return
*/
private static String getResponse(WebResource resource) {
return resource.accept(MediaType.TEXT_XML).get(String.class);
}
}
クライアントプログラムを実行すると、以下の出力が見られます。Client Response
GET http://localhost:8080/RESTfulWS/rest/UserInfoService/name/Pavithra returned a response status of 200 OK
Response
<User><Name>PavithraName>User>
Client Response
GET http://localhost:8080/RESTfulWS/rest/UserInfoService/age/25 returned a response status of 200 OK
Response
<User><Age>25Age>User>
試してみましょう原文リンク:eviac翻訳:ImportNew.com-陳潔訳文リンク:http://www.importnew.com/7336.html