2017-10-17 115 views
1

我的團隊正在研究使用sparkjava進行REST風格的web服務,但我不滿意用於反序列化請求的選項。有沒有辦法讓sparkjava擁有類似dropwizard的restful java API?

這似乎是選項之一:

  1. 使用其默認的反序列化它只是提供了一個嵌套的地圖結構,這違背了使用面嚮對象語言如Java

  2. 裹每個路徑的目的定義在一堆樣板中,以反序列化/序列化請求和響應對象並調用處理程序方法。

我已經寫了一些東西,以減少樣板數量,所以你可以寫這樣的:

public void Routes() { 
     post("/happy/birthday", (request, response) -> { 
      return callJson(getHandler("birthday"), request, response); 
     }); 
    } 

這是不壞,但它需要反思查找生日方法所以不存在生日處理程序方法存在的編譯時驗證。但感覺應該有更好的方法。

回答

0

可能會誤解一些東西,但Spark Java只是Java,因此您可以使用任何Java序列化庫。我用Spark和Gson。

Gson gson = new Gson(); 

    post("/employee", (request, response) -> { 
    ValidateNewEmployeeCommand command = new ValidateNewEmployeeCommand(); 
    Employee emp = gson.fromJson(request.body(), Employee.class); 
    return command.validateEmployee(emp); 
    }, gson::toJson); 
+0

是的,這可能是一個很小的挑剔,但想法是減少樣板量。我的團隊成員設法做了一些事情,以便可以將帖子定義爲: 'EmployeeController c = new EmployeeController(); post(「/ hello」,Employee.class,e :: validateEmployee);' – Supagoat

0

李維(Apache許可)是一種使遠程應用程序能夠容易地與在REST API火花簇相互作用的服務。它可以通過簡單的REST接口或RPC客戶端庫輕鬆提交Spark作業或Spark代碼片段,同步或異步結果檢索以及SparkContext管理。 Livy還簡化了Spark和應用程序服務器之間的交互,簡化了交互式Web /移動應用程序所需的架構。

憑藉李維,你還可以:

使用長時間運行多個星火工作SparkContexts,由多個客戶端

同時管理多個SparkContexts,並在集羣上運行它們(YARN/Mesos),而不是在李維服務器的容錯性好和併發

通過安全認證的通信提交作業作爲預編譯的罐子,代碼片段,或通過Java/Scala的客戶端API

確保安全(正在進行中)

要使用Livy,Spark必須安裝在您的服務器上(1.4或更高版本;斯卡拉2.10版本)。要開始,download/install packages from here然後只需做到以下幾點:

https://blog.cloudera.com/blog/2016/07/livy-the-open-source-rest-service-for-apache-spark-joins-cloudera-labs/

+0

不幸的是,sparkjava被命名混淆 - 它是Apache Spark的一個獨立產品。 – Supagoat

0

它看起來像有沒有辦法做到完全是我瞄準了,但我們已經熟了一些實用程序,可用於做的工作我們並允許我們按照在Dropwizard中定義的方式定義路線。我們會看看我們是否可以開源。

相關問題