最近為了運用 hackpad 在研究 RESTful Web Services ,由於 JDK 並沒有支援,特地搜尋了一下,發現網路中文資源也很少,特此整理了一下。
主要會需要用到兩個套件
- jersey 1.17.1 : 主要為 REST 開發的,有 Client 跟 Server ,本篇主要會講 Client 端連接已有的 Services
- jersey-oauth 1.17.1 : 使 jersey 有額外 OAuth 認證功能用,務必下載 oauth-client 跟 oauth-signature
使用 Jersey 建立簡單 RESTful GET 連線
package org.lee.rest;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
public class TestREST
{
public void run()
{
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource service = client.resource(UriBuilder.fromUri("http://restful").build());
System.out.println(service.accept(MediaType.APPLICATION_JSON).get(String.class));
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
TestREST test = new TestREST();
test.run();
}
}
很簡單的使用 WebResource 去獲取 REST 的 Resouce ,後面的 fromUri 就是 REST services 所在的網址。
service.accept
提供獲取下來以什麼方式呈現 (xml, json等),此處是 json 為例。
經由 OAuth 建立 RESTful GET 連線
那如果要使用 OAuth 連線的 RESTful services 要如何呢? 其實只多加兩行程式碼。
package org.lee.rest;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.oauth.client.OAuthClientFilter;
import com.sun.jersey.oauth.signature.OAuthParameters;
import com.sun.jersey.oauth.signature.OAuthSecrets;
public class TestREST
{
private static final String CLIENT_ID = "YOUR_CLIENT_ID";
private static final String SECRET = "YOUR_SECRET";
public void run()
{
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
OAuthClientFilter filter = new OAuthClientFilter(
client.getProviders(),
new OAuthParameters().consumerKey(CLIENT_ID),
new OAuthSecrets().consumerSecret(SECRET));
client.addFilter(filter);
WebResource service = client.resource(UriBuilder.fromUri("http://restful").build());
System.out.println(service.accept(MediaType.APPLICATION_JSON).get(String.class));
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
TestREST test = new TestREST();
test.run();
}
}
增加個 filter 告訴連線的 Client 是使用 OAuth 連線,需要 OAuth 的兩個必要參數 Client id 與 Secret ,如此一來便能在使用 OAuth 連線的 RESTful Web Services 。
POST 部分,請容我脫稿,下次再補上
其實是根本還沒研究好