如何在RPC和REST for API之间做出选择?

时间:2018-07-05 10:47:29

标签: node.js rest api express rpc

我制作了一个应用程序,用户可以使用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用于函数调用(可能就是我的情况)。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为走哪条路并不重要,很大程度上取决于应用程序的其余部分。如果您的应用程序所做的只是消耗代码,请运行它并提供输出,那么两种方法都可以。

您显然可以看到这可能是一个RPC调用,类似/exec,但它也很容易成为REST调用,尤其是当您想添加某种形式的日志记录时。例如:POST /program可以设计为使用一些代码,在数据库中创建“程序”,运行代码,并将输出与程序一起记录在数据库中。然后,您将返回该程序并将其返回给客户端。

如果您只是使用代码,运行它并通过HTTP返回输出,那么我很想使用JSON-RPC类的端点来简化操作并揭示意图(简单地触发动作)

很大程度上取决于您的应用程序的未来以及它可能变得更大,以及您将拥有什么其他功能。如果您要使用90%的RESTful API和几个端点作为JSON-RPC,那么我将使用REST API来确保所有内容的一致性。