📜  Python|使用 Flask 构建 REST API

📅  最后修改于: 2022-05-13 01:54:36.957000             🧑  作者: Mango

Python|使用 Flask 构建 REST API

先决条件:Rest API 简介

REST 代表 REpresentational State Transfer,是现代 Web 开发中使用的一种架构风格。它为 Web 应用程序定义了一组或规则/约束来发送和接收数据。

在本文中,我们将使用 Flask 框架在Python中构建一个 REST API。 Flask 是一个流行的用于构建 Web 应用程序的微框架。由于它是一个微型框架,因此非常易于使用,并且缺少成熟框架中的大多数高级功能。因此,在 Flask 中构建 REST API 非常简单。

在 Flask 中创建 REST API 有两种方法:

  1. 在没有任何外部库的情况下使用 Flask
  2. 使用 flask_restful 库

所需库:

flask_restful可以通过 pip 命令安装:

sudo pip3 install flask-restful 

方法一:只使用 Flask

这里有两个函数:一个函数只返回或打印通过 GET 或 POST 发送的数据,另一个函数计算通过 GET 请求发送的数字的平方并打印。

# Using flask to make an api
# import necessary libraries and functions
from flask import Flask, jsonify, request
  
# creating a Flask app
app = Flask(__name__)
  
# on the terminal type: curl http://127.0.0.1:5000/
# returns hello world when we use GET.
# returns the data that we send when we use POST.
@app.route('/', methods = ['GET', 'POST'])
def home():
    if(request.method == 'GET'):
  
        data = "hello world"
        return jsonify({'data': data})
  
  
# A simple function to calculate the square of a number
# the number to be squared is sent in the URL when we use GET
# on the terminal type: curl http://127.0.0.1:5000 / home / 10
# this returns 100 (square of 10)
@app.route('/home/', methods = ['GET'])
def disp(num):
  
    return jsonify({'data': num**2})
  
  
# driver function
if __name__ == '__main__':
  
    app.run(debug = True)

输出:

执行平方函数:

方法2:使用flask-restful

Flask Restful 是 Flask 的一个扩展,它增加了对使用 Flask 作为后端在Python中构建 REST API 的支持。它鼓励最佳实践,并且非常容易设置。如果您已经熟悉烧瓶,Flask restful 很容易上手。

flask_restful中,主要的构建块是资源。每个资源都可以有几个与之关联的方法,例如 GET、POST、PUT、DELETE 等。例如,每当向其发送 get 请求时,可能会有一个资源计算数字的平方。每个资源都是一个继承自flask_restful的Resource类的类。创建和定义资源后,我们可以将自定义资源添加到 api 并为相应资源指定 URL 路径。

# using flask_restful
from flask import Flask, jsonify, request
from flask_restful import Resource, Api
  
# creating the flask app
app = Flask(__name__)
# creating an API object
api = Api(app)
  
# making a class for a particular resource
# the get, post methods correspond to get and post requests
# they are automatically mapped by flask_restful.
# other methods include put, delete, etc.
class Hello(Resource):
  
    # corresponds to the GET request.
    # this function is called whenever there
    # is a GET request for this resource
    def get(self):
  
        return jsonify({'message': 'hello world'})
  
    # Corresponds to POST request
    def post(self):
          
        data = request.get_json()     # status code
        return jsonify({'data': data}), 201
  
  
# another resource to calculate the square of a number
class Square(Resource):
  
    def get(self, num):
  
        return jsonify({'square': num**2})
  
  
# adding the defined resources along with their corresponding urls
api.add_resource(Hello, '/')
api.add_resource(Square, '/square/')
  
  
# driver function
if __name__ == '__main__':
  
    app.run(debug = True)

输出: