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.javapackage 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.javapackage 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