确定API是RPC或休息



我最近使用烧瓶设计了一个示例项目的REST API。前端基于React.js。但是我收到了同事的反馈,即API不是REST API及其RPC。

API基本上接受3个参数,2个数字和一个操作('add'sub','mul','div'(。在终点http://127.0.0.1:5000/calculator上输入JSON看起来像:

{"value1":"7.1","value2":"8","operator":"mul"}
from flask import Flask, jsonify, request, abort
from flask_cors import CORS
APP = Flask(__name__, static_url_path='')
CORS(APP)  # For cross origin resource sharing
APP.config['CORS_HEADERS'] = 'Content-Type'
@APP.route('/calculator', methods=['POST'])
def calculator_operation():
    if not request.json:
        abort(400)
    try:
        val1 = float(request.json['value1'])
        val2 = float(request.json['value2'])
        operator = request.json['operator']
        if operator == 'add':
            result = val1 + vla2
        elif operator == 'mul':
            result = val1 * val2
        elif operator == 'sub':
            result = val1 - val2
        elif operator == 'div' and val2 == 0:
            result = 'Cant divide by 0'
        elif operator == 'div':
            result = round((val1 / val2), 2)
        return (jsonify({'result': result}), 200)
    except KeyError:
        abort(400)
if __name__ == '__main__':
    APP.run(debug=True)

代码正常。我想知道这是基于终点和执行操作的休息还是RPC。

编辑:

ajax调用

$.ajax({
            type: "POST",
            url: "http://127.0.0.1:5000/calculator",
            data: JSON.stringify({
                value1: arg1,
                value2: arg2,
                operator: this.state.operation
            }),
            contentType: "application/json",
            dataType: "json",
            success:( data ) => {
                this.setState({ result: data.result, argumentStr: data.result });
            },
            error: (err) => {
                console.log(err);
            }
        });

我想知道这是基于终点和执行操作的静止还是RPC。

客户端如何发现端点是什么,以及输入JSON的样子?

在网上,将有一种标准媒体类型来描述表格。表单的表示将包括键和值,目标URI以及使用HTTP方法。处理规则将描述如何获取表格的详细信息以及消费者提供的价值,并从中构建HTTP请求。

那是休息:做我们在网上做的事情。

另一种休息方法是定义链接关系,也许是" http://example.org/calculator"和媒体类型application/prs.calculator+json,然后在您的上下文中进行" http://示例"中的文档。org/calculator;链接关系表明目标URI对使用有效载荷application/prs.calculator+json的消息响应。这本质上是原子集团和Atom Pub。

也是休息。

fielding对他设计的API

发表了有趣的评论

我还应该指出,上面的尚未完全休息,至少我是如何使用该术语的。我所做的只是描述了服务接口,这不超过任何RPC。为了使其恢复,我需要添加超文本以介绍和定义服务,描述如何使用表单和/或链接模板执行映射,并提供代码以有用的方式组合可视化。

也就是说,如果您要执行与身体的语义安全请求一起进行,那么您可能会被RPC思考所困扰。请注意,在网络上,参数化读取是通过与客户端进行通信如何修改目标uri(例如,通过根据标准化处理规则编码的数据附加查询字符串(来完成的。

REST代表代表性状态转移。您的操作是无状态的,因此没有州可以转移的状态。但是,您的操作确实接受参数并以过程或功能的方式返回结果,并且它是遥远的,因此远程过程调用将是对正在发生的事情的很好描述。毕竟,您为客户提供了一种与语言无关的方式来调用您的calculator_operation程序。

模型中明显缺少的是服务器端数据。通常,REST API提供了一种与服务器端对象进行交互的方法:查询,创建,替换,更新或删除。您的服务器端没有保留数据:这只是一个回答问题的甲骨文。您有"查询"方面,别无其他。

最新更新