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: 你這不是廢話嗎....

相關文章
相關標籤/搜索