最近為了運用 hackpad 在研究 RESTful Web Services ,由於 JDK 並沒有支援,特地搜尋了一下,發現網路中文資源也很少,特此整理了一下。

主要會需要用到兩個套件

使用 Jersey 建立簡單 RESTful GET 連線

TestREST.java
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 要如何呢? 其實只多加兩行程式碼。

TestREST.java
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 部分,請容我脫稿,下次再補上 其實是根本還沒研究好

參考資料