2013-10-14 45 views
6

我試圖確定是否使用 -實現REST API的調用騾子 - 澤西島與普通的老騾子-HTTP

  1. 新澤西州(JAX-RS)與基於HTTP的入站端點。

  2. 使用基於HTTP的入站端點,然後檢查HTTP頭數據(如http.method,http.query.params,http.query.string等)以確定REST方法。即基於澤西島的非定製方法來實施REST。的方法#

優勢1

  1. 標準:在Java實現REST服務,基於標準的JAX-RS的方法。

  2. Documenting非常簡單:生成文檔非常簡單,因爲有許多工具使用JAX-RS註釋來生成文檔。的方法#1

    缺點如果一定要內騾使用澤西然後澤西方法作爲直通的有效載荷數據。例 -

    @POST 
    @Produces(MediaType.APPLICATION_JSON) 
    public String create(String jsonPayload) { 
        logger.debug("Received and added data :" jasonPayload); 
        return jsonPayload; 
    

    } 在我們的使用情況下,我們必須到那裏無論是插入到數據庫或轉發到其他一些Web服務的下一個流程傳遞這些數據。我們不想在這個類中注入mule特定的代碼來從create方法中調用其他Mule流。我們別無選擇,只能將有效載荷從這種方法中移出並在騾流中處理。

  3. 澤西處理之後創建方法它創建一個封裝有效載荷的響應對象。如果我們想對有效載荷做些什麼,那麼我們必須首先從Response對象中提取有效載荷。這是一個不必要的麻煩。

任何建議,意見,想法?

回答

2

我們不想在這個類中注入mule特定的代碼來從create方法中調用其他Mule流。我們別無選擇,只能將有效載荷從這種方法中移出並在騾流中處理。

我不同意這個說法:組件綁定將無騾自定義接口注入到你自己的類中。這是我建議您使用的方法:http://www.mulesoft.org/documentation/display/current/Component+Bindings

+1

謝謝大衛。我喜歡這種方法。不過,我面臨[this](http://stackoverflow.com/questions/17224946)問題。任何想法如何解決這個問題? – user1493140

4

根據David的反饋。這是我如何實現它 -

REST類是TestAPI -

@Path("/test") 
public class TestAPI { 
private DBOperations dbo; 

@POST 
@Produces(MediaType.APPLICATION_JSON) 
public String create(String jsonPayload) { 
    System.out.println("Received and added global attribute :" 
      + jsonPayload); 
    dbo.create(jsonPayload); 
    return jsonPayload; 
} 

這裏是接口 -

public interface DBOperations { 

    public String create(String json); 
    public String read(String json); 
    public String update(String json); 
    public String delete(String json); 

} 

這裏是騾流,這顯示瞭如何的每個方法DBOperations被映射到mule配置中的不同流。

<flow name="jersey-rest-flow" doc:name="jersey-rest-flow"> 
    <http:inbound-endpoint exchange-pattern="request-response" 
     host="localhost" port="8100" doc:name="HTTP" /> 
    <logger message="Message Received - #[payload]" level="INFO" 
     doc:name="Logger" /> 
    <jersey:resources doc:name="REST"> 
     <component class="com.test.rest.TestAPI"> 
      <binding interface="com.test.DBOperations" 
       method="create"> 
       <vm:outbound-endpoint exchange-pattern="request-response" 
        path="create-data-vm" /> 
      </binding> 
      <binding interface="com.test.DBOperations" 
       method="read"> 
       <vm:outbound-endpoint exchange-pattern="request-response" 
        path="read-data-vm" /> 
      </binding> 
      <binding interface="com.test.DBOperations" 
       method="update"> 
       <vm:outbound-endpoint exchange-pattern="request-response" 
        path="update-data-vm" /> 
      </binding> 
      <binding interface="com.test.DBOperations" 
       method="delete"> 
       <vm:outbound-endpoint exchange-pattern="request-response" 
        path="delete-data-vm" /> 
      </binding> 
     </component> 
    </jersey:resources> 
</flow> 
4

還有第三個選擇,如果你不想自己綁在Java代碼 - 這是REST路由器模塊:
http://mulesoft.github.io/mule-module-rest-router/mule/rest-router-config.html
,我認爲,這將是一個更適合你。

更重要的是,幾天前我寫了一篇關於Mule的REST服務的文章,描述了所有這三種方法。包括的例子。您的問題可能會有幫助:
http://poznachowski.blogspot.com/2013/10/exposing-restful-interface-with-mule-pt1.html
http://poznachowski.blogspot.com/2013/10/exposing-restful-interface-with-mule-pt2.html