2017-10-17 114 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中定义的方式定义路线。我们会看看我们是否可以开源。

相关问题