Как выбрать между RPC и REST для API? - PullRequest
0 голосов
/ 05 июля 2018

Я сделал приложение, в котором пользователь отправит Программу на C или Python и Введет через STDIN, а мой API вернет обратно вывод Программы в формате JSON.
Код 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 голосов
/ 05 июля 2018

По моему мнению, это не так уж важно, какой путь вы выберете, многое будет зависеть от остальной части приложения. Если все ваше приложение потребляет код, запускает его и выдает результат, то, скорее всего, все будет в порядке.

Вы, очевидно, можете видеть, как это может быть вызов RPC с чем-то вроде /exec, но это также может быть вызов REST, особенно если вы хотите добавить какую-либо форму ведения журнала. Например: POST /program может быть предназначен для потребления некоторого кода, создания «программы» в базе данных, запуска кода и регистрации выходных данных вместе с программой в базе данных. Затем вы вернете программу и ее ответ клиенту.

Если вы буквально просто потребляете код, запускаете его и возвращаете выходные данные через HTTP, то у меня возникнет соблазн пойти с помощью конечной точки JSON-RPC для простоты и раскрытия намерения (простого запуска действия). .

Многое зависит от будущего вашего приложения и того, насколько большим оно может стать, и какой другой функциональности вы будете иметь. Если у вас будет 90% RESTful API и пара конечных точек в виде JSON-RPC, то я бы просто использовал REST API для всего для согласованности.

...