Scala和Play-Framework公开REST服务.现在渲染(但需要使用其他东西然后Scala)

Dom*_*mra 5 java rest web-services scala

我的大学任务有一个非常特殊的要求.其关键在于我们需要构建一个使用2种不同语言的Web应用程序.奇怪的要求我知道.

我立刻想到让Scala和Play Framework以JSON方式提供数据,然后拥有某种Python客户端,将REST服务呈现为HTML.

问题是我对此很新.我之前从未做过REST的事情,甚至术语也令人生畏.然而,我设法让几个模型启动并运行Play,为Json提供服务.现在我需要渲染它.

你会建议什么来满足这个要求?还有其他想法吗?理想情况下,我仍然希望使用Scala和Play,但除了这个限制之外,我不关心还有什么.

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

Jam*_*ard 7

我创建了一个非常简单的项目,展示了如何执行此操作:https:
//github.com/jamesward/playscalapython

没有多少.这是Play!/ Scala app:

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)
Run Code Online (Sandbox Code Playgroud)

以下是使用Play中的JSON的Python应用程序!应用:

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)
Run Code Online (Sandbox Code Playgroud)