contact us, contact, email

第一次使用 Python Flask Restful API 就上手 — 使用 POST 方法

Restful API 其實就是開放一個 EndPoit 的網路接口給其他人使用,並將要做的事情封裝在該接口內,不需要知道真實運作狀況,只要得到答案即可。

  • 所需的 Python 模組

    • flask
    • flask_restful

步驟

1. 創建一個完整的 flask (app.py) ,其Code 如下

# 載入必須套件
from flask import Flask, request
from flask_restful import Resource, Api

# 創建Flask app物件
app = Flask(__name__)
api = Api(app)

# 創建一個陣列(創一個名為apple物品當測試),存放品項
items = [
    {
        "name": "apple",
        "price": 32.3
    }
]

class Item(Resource):

    # 單一品項查詢
    def get(self, name):
        item = next(filter(lambda x: x['name'] == name, items), None)
        return {'item': item}, 200 if item else 404

    # 建制新品項
    def post(self, name):
        # 如果該品項已經存在 items 內,就找出並回傳給客戶端該品項已經存在
        if next(filter(lambda x: x['name'] == name, items), None):
            return {'message': f'An item with name {name} already exists ..'}, 403
        # 如果該品項不存在,則解析客戶端傳來的body,並將其品項寫入 items
        data = request.get_json()
        item = {'name': name, 'price': data['price']}
        items.append(item)
        return item, 201


class ItemsList(Resource):
    # 取得所有品項
    def get(self):
        return {'items': items}


api.add_resource(Item, '/item/<string:name>')
api.add_resource(ItemsList, '/items')

if __name__ == "__main__":
    app.run(port=5000, debug=True)
  • 並執行 python3 app.py , 將服務on起來

2. 下載 PostMan 神器:

PostMan 官網請點我

3. 創建一個 HTTP GET 請求測試 API

  • 選擇左邊的 Collection,並產生一個新的 Request, 選擇 Get 方式, 網址為: http//:127.0.0.1:5000/items

    • Send 發送
    • 確認查看所有品項 API 是正常
    • 出現 Apple 品項結果

4. 創建一個 HTTP POST 請求,創建新品項

  • 產生一個新的 Request, 選擇 POST 方式,網址為: http//:127.0.0.1:5000/item/banana

    • 選擇 Body
    • 選擇 Raw
    • 選擇 JSON 格式
    • 下方輸入一個JSON { "price": 23.5 }
    • Send 發送

  • 品項香蕉及完成創建

5. 測試重複發送 HTTP POST 請求,且品項重複

  • 如上一步驟,重複再做一次,伺服器將會回傳該品項已經存在

6. 測試重複發送 HTTP GET 請查,查看單一品項是否已經建立

  • 產生一個新的 Request, 選擇 GET 方式,網址為: http//:127.0.0.1:5000/item/banana

    • Send 發送
    • 確認查看單一品項 API 是正常
    • 出現 banana 品項結果

程式碼解析

  1. 單一品項查詢

    • 透過 GET 方式並於路由指定品項,
    • 使用 filter 方式篩選出指定的品項
    • 有找到則回傳該品項
    • 如果未篩選到則回傳 404
class Item(Resource):

    # 單一品項查詢
    def get(self, name):
        item = next(filter(lambda x: x['name'] == name, items), None)
        return {'item': item}, 200 if item else 404
  1. 單一品項建立

    • 透過 POST 方式並於路由指定品項
    • 使用 filter 方式篩選出指定的品項
    • 有找到則回傳該品項已經存在,不必創建
    • 如果未找到,則解析客戶端的body
    • 並將創建的品項加入 items 陣列內
class Item(Resource):

    # 建制新品項
    def post(self, name):
        # 如果該品項已經存在 items 內,就找出並回傳給客戶端該品項已經存在
        if next(filter(lambda x: x['name'] == name, items), None):
            return {'message': f'An item with name {name} already exists ..'}, 403
        # 如果該品項不存在,則解析客戶端傳來的body,並將其品項寫入 items
        data = request.get_json()
        item = {'name': name, 'price': data['price']}
        items.append(item)
        return item, 201

下一章將講述如何使用 PUT 更新品項

Similar Posts

One Comment

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。