restful api接口封装

1. 背景知识

restful 是一种互联网软件架构(以网络为基础的应用软件的架构设计),其特点:

  • 一个URL对应一种资源
  • 表现层:客户端和服务器之间,把"资源"具体呈现出来的形式,如文本可以采用txt,json等格式
  • 客户端基本操作:GET 获取资源、POST 新建/更新资源、PUT 更新资源、DELETE 删除资源

flask官网:http://flask.pocoo.org/docs/0.12/quickstart/#a-minimal-application

2. 使用说明

route():装饰器,URL对应触发的函数,该段代码运行后,打开http://127.0.0.1:5000即可查看对应的资源

  • 外部访问:配置 app.run(host=“0.0.0.0”, port=5000)
from flask import Flask, jsonify, abort

app = Flask(__name__)

results = [
    {
    
    
        'input_text': 'xxx',
        'data': [
            {
    
    
                'word': 'xxx',
                'title': ['3690090392616837245', '3814509192824492032']
            }
        ]
    }
]


@app.route('/query/<string:input_text>', methods=['GET'])
def get_tasks(input_text):
    result = list(filter(lambda t: t['input_text'] == input_text, results))
    if len(result) == 0:
         abort(404)
    return jsonify({
    
    'results': result})


if __name__ == '__main__':
    app.run()

在python中采用requests获取网页上资源

import requests
ans = requests.get('http://127.0.0.1:5000/query/xxx')
print(ans.text)

3. 接受请求数据,并返回结果

采用 flask_restful 包的 api 的 get 方法接收请求,并将计算结果返回
客户端在python中采用requests获取网页上资源,并传递请求参数,该段代码中的请求参数为:input_text,值为:枪支

flask接收参数的方式如下,使用中发现采用 post 提交参数,form获取参数的 post 方法速度比 get 方法快些。

  • request.form.get("key", type=str, default=None) 获取表单数据
  • request.args.get("key") 获取 get 请求参数
  • request.values.get("key") 获取所有参数
  • request.get_json("key") 获取解析 json 数据格式
import requests
ans = requests.get('http://127.0.0.1:5000/query/?input_text=枪支')
print(ans.text.encode('utf-8').decode('unicode_escape'))

flask_restful 接收到该参数,并经过一系列的计算后将结果返回

from flask import Flask, request
from flask_restful import Api, Resource
from search_recommend import process_search_recommend

app = Flask(__name__)
api = Api(app)


class ReceiveText(Resource):
    def get(self):
        input_text = request.args.get('input_text')
        results = process_search_recommend(input_text)
        return results, 200


api.add_resource(ReceiveText, '/query/')


if __name__ == '__main__':
    app.run()

在这里插入图片描述

4. api部署的相关问题

  • 编码:采用url请求时出现接收的数据为ASCII码的问题
app.config.update(RESTFUL_JSON=dict(ensure_ascii=False))
  • 跨域:前后端分离开发时,前端调用报错跨域,可以用CORS配置
from flask_cors import CORS


app = Flask(__name__)
CORS(app, supports_credentials=True)

猜你喜欢

转载自blog.csdn.net/shlhhy/article/details/107382942