摘要:開發 RESTful web services client - 使用 Jersey Client API
Jersey client API 是一組非常 High level API,可以讓我們很輕鬆的開發 Restful web services client
這篇文章主要參考 Sun 官網的 Consuming RESTful Web Services With the Jersey Client API
其實該文章已經講的蠻淺顯易懂的,這裡只是整理一下而已 (來灌水的)
我們假設在遠端架設一個 Restful 的服務,這個程式很簡單,填入 from 與 to 參數,
如果沒填,會回應 parameter error,填了就回應 say hello 文字而已
程式碼如下: (關於如何開發 Restful Server 端程式,可參考這裡)
package demo.rest;
import javax.servlet.http.*;
import javax.ws.rs.*;
import javax.ws.rs.core.*;
@Path("/helloworld") // sets the path for this service
public class HelloRS {
@GET
@Produces("text/html") // content type to output
public String sayHelloByGET(
@QueryParam("from") String fromUser,
@QueryParam("to") String toUser,
@Context HttpServletRequest request) {
if (fromUser == null || fromUser.equals("") || toUser==null || toUser.equals(""))
return "parameter error";
else
return fromUser + " say hello (by GET) to " + toUser;
}
@POST
@Produces("text/html") // content type to output
public String sayHelloByPOST(
@QueryParam("from") String fromUser,
@QueryParam("to") String toUser,
@Context HttpServletRequest request) {
if (fromUser == null || fromUser.equals("") || toUser==null || toUser.equals(""))
return "parameter error";
else
return fromUser + " say hello (by POST) to " + toUser;
}
}
接著是這篇文章的重頭戲了,開發用來呼叫 RESTful 的 Client 程式
底下是一個可以 run 的範例 (請自行將 Jersey 相關的 lib 加到 ClassPath)
import javax.ws.rs.core.*;
import com.sun.java_cup.internal.internal_error;
import com.sun.jersey.api.client.*;
import com.sun.jersey.core.util.*;
public class JerseyClientGet {
private String url = "http://localhost:8080/RestfulDemo/resource/helloworld";
public static void main(String[] args) {
new JerseyClientGet().go();
}
public void go() {
Client client = Client.create();
WebResource webResource = client.resource(url);
// 設定要帶的參數
MultivaluedMap queryParams = new MultivaluedMapImpl();
queryParams.add("from", "Rocky Wang");
queryParams.add("to", "Johnney Yeh");
String str = webResource.queryParams(queryParams).get(String.class);
System.out.println(str);
}
}
很簡單吧! 上面的程式就等同於用 IE 開啟 http://localhost:8080/RestfulDemo/resource/helloworld?from=Rocky&to=Johnney Yeh
會回傳 Rocky Wang say hello (by GET) to Johnney Yeh
其中要注意一下,Client.create() 是蠻耗資源的動作,所以盡量重用已有的 client,不要重新建立
再來,如果要得到有關 response 更多的資訊,可以改由下面的寫法 (使用 ClientResponse)
ClientResponse response = webResource.queryParams(queryParams).get(ClientResponse.class);
int status = response.getStatus();
String textString = response.getEntity(String.class);
而如果是要發 POST 的請求,在建立參數的地方仍然一樣,只是送的時候寫法有些不同,如下:
ClientResponse response = webResource.queryParams(queryParams)
.post(ClientResponse.class, queryParams);
知道怎麼寫 client,接下來就可以試著呼叫 Twitter 的 API,自行開發應用囉 :)
Rocky Wang. OCUP, NCLP, SCJP, SCWCD, SCBCD