Java Scala和Play框架公开REST服务。现在进行渲染(但需要使用Scala以外的其他工具)

Java Scala和Play框架公开REST服务。现在进行渲染(但需要使用Scala以外的其他工具),java,web-services,scala,rest,Java,Web Services,Scala,Rest,我有一项大学作业,要求很特别关键是我们需要构建一个使用两种不同语言的web应用程序。奇怪的要求我知道。 我立即想到,或许可以使用Scala和Play框架以JSON格式提供数据,然后使用某种Python客户端,将其余服务呈现为HTML 问题是我对这一点很陌生。我以前从未做过REST,即使是术语也令人望而生畏。然而,我已经成功地建立了几个模型并使用Play运行,为Json提供服务。现在我需要渲染它 你会推荐什么来满足这个要求?还有其他想法吗?。理想情况下,我仍然希望使用Scala和Play,但除了这

我有一项大学作业,要求很特别关键是我们需要构建一个使用两种不同语言的web应用程序。奇怪的要求我知道。

我立即想到,或许可以使用Scala和Play框架以JSON格式提供数据,然后使用某种Python客户端,将其余服务呈现为HTML

问题是我对这一点很陌生。我以前从未做过REST,即使是术语也令人望而生畏。然而,我已经成功地建立了几个模型并使用Play运行,为Json提供服务。现在我需要渲染它

你会推荐什么来满足这个要求?还有其他想法吗?。理想情况下,我仍然希望使用Scala和Play,但除了这个限制,我不在乎还有什么


编辑:我知道这是一个奇怪的要求。为什么我不使用Play来呈现HTML。。。?唉,我不能。

客户机服务器应用程序能满足您的需要吗?如果一部分是Java代码,另一部分是简单的C#GUI,那么通过XML进行通信没有什么区别?有许多不同的解决方案可用


实际上,您甚至不需要一个复杂的XML解决方案:在您的目的中使用
Hessian
。它是一个二进制Web服务,它有java和C++的实现。那可以算是你的第二语言

首先,简单介绍一下rest的背景。实际上,这只是一种表示url标识您的资源的方式,您对这些url执行的HTTP操作指定了相应的CRUD操作

例如,你有一家书店。如果你想列出所有的书,你可以访问。如果您想查看一本书的详细信息,您需要执行HTTP GET on

如果您想创建一本新书,您需要对新书数据执行HTTP POST

类似地,要更新一本书,您需要执行HTTP PUT,要删除一本书,您需要执行HTTP delete。请注意,并非所有浏览器都支持所有http操作,因此restful web应用程序很多时候是用于服务或机器对机器通信的

您可以使用play为json提供服务器,并使用swing构建gui。如果你想使用Scala,它有相当不错的swing支持

从Scala/java中的restful web服务请求数据将非常简单。您可以使用内置的java.net,一个类似ApacheHttpClient的第三方库,也可以使用Scala io.Source-Source.fromURL(“http://server/resource"

此外,Scala还内置了对XML的支持,如果数据是XML的话,这将使使用数据变得容易

还有一种可能性。你可以采取刺耳的方法。让框架提供html+javascript。Javascript绝对是另一种编程语言。您可以选择jquery、prototype或extjs之类的东西来帮助构建前端


我知道我有点漫无边际,但我希望这能有所帮助。

我创建了一个非常简单的项目,展示了如何做到这一点:

没什么大不了的。这是剧本!/Scala应用程序:

package controllers

import play._
import play.mvc._

object Application extends Controller {

    def index = {
        val widget1: Widget = Widget(1, "The first Widget")
        val widget2: Widget = Widget(2, "A really special Widget")
        val widget3: Widget = Widget(3, "Just another Widget")
        val widgets: Vector[Widget] = Vector(widget1, widget2, widget3)
        Json(widgets.toArray)
    }

}

case class Widget(val id: Int, val name: String)
下面是一个Python应用程序,它使用了游戏中的JSON!应用程序:

import os
import simplejson
import requests
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    jsonString = requests.get(os.environ.get("JSON_SERVICE_URL", "http://localhost:9000"))
    widgets = simplejson.loads(jsonString.content)
    htmlResponse = "<html><body>"
    for widget in widgets:
        htmlResponse += "Widget " + str(widget['id']) + " = " + widget['name'] + "</br>"
    htmlResponse += "</body></html>"
    return htmlResponse

if __name__ == "__main__":
    port = int(os.environ.get("PORT", 5000))
    app.run(host='0.0.0.0', port=port)
导入操作系统
导入simplejson
导入请求
从烧瓶进口烧瓶
app=烧瓶(名称)
@附件路线(“/”)
def hello():
jsonString=requests.get(os.environ.get(“JSON\u服务\u URL”)http://localhost:9000"))
widgets=simplejson.load(jsonString.content)
htmlResponse=“”
对于小部件中的小部件:
htmlResponse++=“Widget”+str(Widget['id'])+”=“+Widget['name']+”
” htmlResponse+=“” 返回htmlResponse 如果名称=“\uuuuu main\uuuuuuuu”: port=int(os.environ.get(“port”,5000)) app.run(host='0.0.0.0',port=port)
你能制作一个部分是Java,部分是Scala的Play应用程序吗?您还可以让Play应用程序向客户端发送Javascript,这可能算作另一种语言。也许您可以使用Play构建ajax web应用程序,并且您已经使用了两种不同的语言(Scala和Javascript)。这是我最初的想法Kipton Barros,但是课程协调员说Scala和Java是同一种语言(我是谁:P)Brian Hsu。客户端语言显然不算在内。我也有这个想法。我不确定我理解任务的意图,但是你也可以考虑不同的JVM语言(BeeSea,Jython,JuRube,Culjule.)…James Ward,我的同事推特的T恤用你的帖子点亮了。不知怎的,你看到了我的问题,写了一些代码,贴到了推特上,我的同事看到了帖子,隔着隔间对我大喊:“这正是你在做的!”。我们都没有谈论这个问题——真奇怪。世界真小,我的代码和你的很相似。我决定和Django一起去玩。Play处理所有数据库交互,提供REST注释服务。Django然后执行所有验证并接收和发送JSON。