Flask编写API的核心思想

这篇文章,是个人自言自语数据库

Q: 为何须要API

A: 当客户端与服务器端分离时, 须要经过API传递资源json

Q: 什么是资源

A: 即数据库中的数据flask

Q: 如何表示资源

A: 使用json的方式表示, 以键值的方式表示一个资源, 每个键表明资源的一个属性; 使用数组(列表)表示资源的集合, 例如api

[
    {
        'id': 1,
        'username': 'neo1218'
    },
    {
        'id': 2,
        'username': 'zxc0328'
    }
]

Q: 如何使用HTTP的方式对资源进行操做

A: 涉及HTTP方法映射: 以下表数组

GET ------> 获取(集合,特定资源)
POST -----> 建立(特定资源)
PUT ------> 更新(特定资源)
DELETE ---> 删除(特定资源)

Q: 那么flask编写API的核心是什么?

A: <br/>服务器

1. 提供资源

flask须要把数据库资源经过json的形式提供出去, 因此须要在数据库Model中定义to_json方法, 以
json的形式表示数据库数据, 以User类为例session

class User(db.Model):
    ......
    def to_json(self):
        json_user = {
            'id': self.id,
            'username': self.username
        }
        return json_user
    ......

2. 接受json数据

flask须要接受客户端发送的json数据从而用于建立资源,
因此须要在数据库Model中定义from_json方法code

class User(db.Model):
    ......
    @staticmethod
    def from_json(json_data):
        user = User(
            username = json_data.get('username'),
            password = json_data.get('password')
        )
        return user
    ......

并在API代码中搭配[request.get_json()]()使用资源

/api/users.py

from flask import request

@api.route('/users/', methods=['POST'])
def create_user():
    user = User.from_json(request.get_json())
    db.session.add(user)
    db.session.commit()

HTTP方法与操做对应

仍是以用户资源为例:get

@api.route('/users/', methods=['GET'])
def get_users():
    """获取用户资源集合"""
    pass

@api.route('/users/<int:id>/', methods=['GET'])
def get_id_users(id):
    """获取特定id用户资源"""
    pass

@api.route('/users/', methods=['GET', 'POST'])
def create_user():
    """建立用户资源"""
    pass

@api.route('/users/<int:id>/', methods=['GET', 'PUT'])
def update_id_user(id):
    """更新特定id用户资源"""
    pass

@api.route('/users/<int:id>/', methods=['GET', 'DELETE'])
def delete_id_user(id):
    """删除特定id用户"""
    pass

Q: 因此说flask编写API的核心思想就是以json的方式表示和接收资源并将相应操做映射到http方法上从而操纵资源, 是吗?

A: 你这不是废话吗....

相关文章
相关标签/搜索