【发布时间】:2019-05-24 03:25:14
【问题描述】:
我最近使用flask 为示例项目设计了一个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)
代码运行良好。我想知道这是基于端点和正在执行的操作的 REST 还是 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);
}
});
【问题讨论】:
-
你上网查过REST是什么意思吗?你会说什么?
-
@hek2mgl 我做到了,我很困惑。这对我来说似乎很平静。如果有更多功能,向每个操作添加端点将使维护变得更加困难。输入中的值是否超过 2 个使其成为 RPC ?
-
简单场景,客户端如何“知道”或“了解”服务器在向其发送请求时期望作为输入的内容?知识从何而来?客户端开发人员必须通过一些任意文档吗? --> RPC;提供的信息,就像在 Web 中一样,以表单和客户端只是通过链接通过应用程序“冲浪”吗? --> 最有可能的 REST;它是否也尊重多种媒体类型和内容类型协商? --> 更有可能是 REST;在所有其他场景中 --> RPC。