我制作了一个应用程序,用户可以使用C或Python发送程序,并通过STDIN输入,而我的API将以JSON格式返回Program的输出。
Nodejs / Expressjs代码:
route.post('/exec', (req, res, next) => {
if(req.body.lang === 'c')
cExec(req, res)
if(req.body.lang === 'py3')
py3Exec(req, res)
})
在py3Exec() and cExec()
中执行代码之后,我编写了此代码,以使用退出代码发送回输出:
if(code === 0)
{
if(stdout === req.body.output)
res.send({
"result": "AC",
"output": stdout
})
else
res.send({
"result": "WA",
"output": stdout
})
}
else
{
res.send({
"result": "ERR",
"error": stderr
})
}
https://github.com/vkartik97/Online-IDE-API/blob/master/routes/run.js#L41
因此,此API是REST。我想知道这是否是此用例的完美方法,或者是否应该使用RPC,因为REST仅用于服务器中的资源,而RPC用于函数调用(可能就是我的情况)。
谢谢!
答案 0 :(得分:0)
我认为走哪条路并不重要,很大程度上取决于应用程序的其余部分。如果您的应用程序所做的只是消耗代码,请运行它并提供输出,那么两种方法都可以。
您显然可以看到这可能是一个RPC调用,类似/exec
,但它也很容易成为REST调用,尤其是当您想添加某种形式的日志记录时。例如:POST /program
可以设计为使用一些代码,在数据库中创建“程序”,运行代码,并将输出与程序一起记录在数据库中。然后,您将返回该程序并将其返回给客户端。
如果您只是使用代码,运行它并通过HTTP返回输出,那么我很想使用JSON-RPC类的端点来简化操作并揭示意图(简单地触发动作)
很大程度上取决于您的应用程序的未来以及它可能变得更大,以及您将拥有什么其他功能。如果您要使用90%的RESTful API和几个端点作为JSON-RPC,那么我将使用REST API来确保所有内容的一致性。