在 Java 中開發 Web 應用程式大多使用 Servlet、JSP 等標準,這些架構主要設計是以Web Application為主要訴求,而另外一個常見的應用則是Web Services。
設計Web Services,可以使用以SOAP/WSDL等XML-Based的技術,定義是較為嚴謹的Web services;或是以另一種以純文字為基礎,來儲存和交換簡單結構的輕量級資料交換格式的JSON 。這兩種技術分別對應為JAX-WS跟JAX-RS
而App所使用的WebApi便是使用以 JAX-RS 為標準的 Jersey 做為開發環境。
REST
REST是 Representational State Transfer 的縮寫,而REST並非是個標準或協定,而是一個設計理念。
REST把所有WEB上的東西都以一個資源去看待,並且所有資源都會有一個URI(Uniform Resource Identifier),這個概念對應Web就是網址。
HTTP請求有幾種Method,常見的有GET跟POST,比較少見的有PUT跟DELETE。在當初設計HTTP時,有這樣的設計是希望GET代表取得資源,POST代表的是新增資源,而PUT跟DELETE就分別代表更新跟移除資源。
那RESTful Web Services則是是以HTTP為基礎,並以REST為設計精神,必且有以下三個特色
- 所有的API或是以Resource的形式存在,例如 htttp://www.example.com/products/12345
- 這個服務可以接受與返回某個MIME-TYPE,最常見的是JSON格式,也可以回傳PNG/JPG/TXT等格式。
- 對資源的操作會支援各種請求方法 (例如GET, POST, PUT, DELETE)
有了RESTful基本概念,那要開始介紹的是Java對RESful Web Service的解決方案:JAX-RS。
JAX-RS跟所有Java EE的技術一樣,它只提供了技術標準,可以允許各家廠商有自己的實作,我們目前用的Jersey即是實作之一。
假設我們有一個簡單的hello的resource,他的URI可能是:
http:///localhost:8080/hello/Polory
我們希望輸出是:
Hello, Polory
那這個簡單的應用的程式碼可能如下
@Path("/hello")
public class HelloRS {
@GET
@Path("/{name}")
public String sayHello(@PathParam("name") String name) {
return "Hello, " + name;
}
}