首頁>技術>

其實,我們只需要一個API。

API(應用程式程式設計介面)是一個簡單的介面,它定義了可以發出的請求型別(需求/問題等)、請求的發出方式以及處理方式。

在本文中,我們將構建一個API,它允許我們向不同的端點發送一系列GET/POST/PUT/PATCH/DELETE等各種請求,並返回或修改與API連線的資料。

我們將使用Flask框架來建立我們的API,並使用Postman來對其進行測試它。本文將涵蓋以下內容:

1.設定

資料集初始化Flask API端點執行本地伺服器

2.編寫API

GETPOST401未經授權PUTDELETE使用者類(摘要)

3.總結

設定

我們的API將包含兩個端點:使用者和位置。 前者將允許訪問我們註冊使用者的詳細資訊,而後者將包括咖啡館位置列表。

此處假設的用例是數百萬個咖啡館的書籤應用程式,使用者可以在其中開啟該應用程式併為自己喜歡的咖啡館新增書籤,例如谷歌地圖。

1.資料集

為了簡單起見,我們將把這些資料儲存在兩個本地CSV檔案中。

CSV檔案如下所示:

users.csv:https://drive.google.com/file/d/12-nW-R6TEPbUzSVF8zsQtOm992TdZOqj/view?usp=sharing

locations.csv:https://drive.google.com/file/d/1ERGeiKZLNuD9K-MHd7a0Colqj_DqiMww/view?usp=sharing

2.初始化Flask API

對於Python指令碼,我們需要匯入模組並初始化API,如下所示:

from flask import Flaskfrom flask_restful import Resource, Api, reqparseimport pandas as pdimport astapp = Flask(__name__)api = Api(app)

3.端點

正如上文提到的,我們的API有兩個端點:使用者和位置。

假設我們的API的結果位於www.api.com網站,則將在www.api.com/users提供與Users類的通訊,並在www.api.com/locations提供Locations。

為了建立端點,我們需要定義一個Python類,然後使用api.add_resource將其連線到所需的端點,如下所示:

class Users(Resource): # 方法在這裡 passapi.add_resource(Users, '/users') # /users'是我們的切入點
Flask需要知道類是我們API的端點,因此我們將Resource與類定義一起傳入。在類內部,包含了我們的HTTP方法(GET,POST,DELETE等)。最後,我們使用api.add_resource將Users類與/ users端點連結。

因為我們需要兩個端點,所以我們複製了邏輯:

class Users(Resource): #方法 pass class Locations(Resource): #方法 pass api.add_resource(Users, '/users') # '/users' 是我們進入使用者的切入點api.add_resource(Locations, '/locations') # '/ locations'是我們的位置的切入點

4.執行本地伺服器

最後,在我們寫出API時,還要對其進行測試!

為此,我們需要託管我們的API,我們可以在本地通過將app.run新增到指令碼末尾來進行本地化,如下所示:

if __name__ == '__main__': app.run() #執行 Flask app

當我們執行指令碼時,我們會看到如下所示:

設定好伺服器後,如果您在使用Postman構建API的實際標準之前還沒有使用過它,就可以對其進行測試。

編寫API

在每個類中,我們保留HTTP方法GET,POST和DELETE。

要建立GET方法,我們使用def get(self)。POST和DELETE遵循相同的模式。

1.GET

GET方法是最簡單的。我們返回儲存在字典中的 users.csv 中儲存的所有資料,如下所示:

class Users(Resources): def get(self): data = pd.read_csv('users.csv') # 讀取 CSV data = data.to_dict() # 將資料幀轉換為字典 return {'data': data}, 200 # 返回資料和200 OK程式碼

然後,我們可以執行指令碼來初始化我們的API,開啟Postman並將GET請求傳送到我們的本地主機地址(通常為http://127.0.0.1:5000),這是我們的API入口點。

要將GET請求傳送到Postman中的API,我們:

從下拉列表中選擇GET;輸入我們的API例項+ / users的入口點(端點);點擊發送;檢查我們的API返回的狀態碼(我們應該看到200 OK);檢視我們的API響應,即JSON(如字典)格式的users.csv。

2.POST

POST方法允許我們將記錄新增到資料中。在這種情況下,我們將使用 usedId,name和city的引數。

這些引數作為URL引數傳遞到我們的API端點,如下所示:

http://127.0.0.1:5000/users?userId=abc123&name=The Rock&city=Los Angeles

我們可以指定所需的引數,然後使用reqparse解析提供的值,如下所示:

parser = reqparse.RequestParser() # 初始化parser.add_argument('userId', required=True) # 新增引數parser.add_argument('name', required=True)parser.add_argument('city', required=True)args = parser.parse_args() # 將引數解析為字典

讓我們分解一下解析器程式碼:

使用.RequestParser()初始化解析器。使用.add_argument([arg_name],required)新增引數。請注意,required = True 表示請求中的引數是必需的。另外,我們可以新增帶有 required = False 的可選引數。使用.parse_args()將引數及其值解析為Python字典。

然後,我們可以訪問傳遞給每個引數的值,就像我們通常在字典中使用鍵值對一樣。

將程式碼進行合併,為CSV新增值:

class Users(Resource): def post(self): parser = reqparse.RequestParser() #初始化  parser.add_argument('userId', required=True) # 新增引數 parser.add_argument('name', required=True) parser.add_argument('city', required=True)  args = parser.parse_args() #將引數解析為字典  # 建立包含新值的新資料幀 new_data = pd.DataFrame({ 'userId': args['userId'], 'name': args['name'], 'city': args['city'], 'locations': [[]] }) # 讀取CSV data = pd.read_csv('users.csv') # 新增新提供的值 data = data.append(new_data, ignore_index=True) # 儲存並返回CSV data.to_csv('users.csv', index=False) return {'data': data.to_dict()}, 200 # 返回200 OK資料

看起來有點混亂,簡單點,我們要做的就是:

現在,我們可以傳送POST請求來建立新使用者了,是不是很簡單?!

3.401未經授權

我們的程式碼處理POST請求,允許我們將新資料寫入users.csv ,但是如果該使用者已經存在怎麼辦?

為此,我們需要新增一個檢查操作。如果 userId 已經存在,我們將向用戶返回401未經授權的程式碼。

回到Postman,我們可以通過嘗試兩次新增同一使用者來測試我們的API是否正常執行。這次,The Rock收到401未經授權的響應。

4.PUT

如果我們想為使用者新增咖啡館怎麼辦? 我們無法使用POST,因為它會返回401未經授權的程式碼,這時候,我們就要用PUT了。

與POST類似,在提供的 userId 不存在的情況下,我們需要新增 if-else 邏輯。

class Users(Resource): def put(self): parser = reqparse.RequestParser() # 初始化 parser.add_argument('userId', required=True) # 新增引數 parser.add_argument('location', required=True) args = parser.parse_args() # 將引數解析為字典 # 讀取 CSV data = pd.read_csv('users.csv')  if args['userId'] in list(data['userId']): #將列表字串評估為列表 data['locations'] = data['locations'].apply( lambda x: ast.literal_eval(x) ) # 選取使用者 user_data = data[data['userId'] == args['userId']] # 更新使用者的位置 user_data['locations'] = user_data['locations'].values[0] \\ .append(args['location'])  # 儲存並返回CSV data.to_csv('users.csv', index=False) # 返回資料和200 OK return {'data': data.to_dict()}, 200 else: # 否則userId不存在 return { 'message': f"'{args['userId']}' user not found." }, 404

除了對程式碼進行一些小調整之外,我們的PUT方法幾乎與POST相同。

回到Postman,我們所需的輸入引數已更改。 現在,我們只需要userId和一個位置即可新增到使用者添加了書籤的位置。

5.DELETE

例如,如果使用者 Jill 認為我們的APP沒有用並且想離開,我們將傳送包含她的userId的DELETE請求。

6.Users Class

這就是構成Users類的所有部分,可以通過我們的 /users 端點進行訪問。

每個位置都有一個唯一的ID,當用戶為一個位置新增書籤時,該唯一ID將通過PUT / users新增到其位置列表中。

這段程式碼與我們在Users類中編寫的程式碼沒有太大區別,在此,我們不再重複。

總結

使用Flask和Python設定API的方法非常簡單。

通過學習上文,我們就有了一種易於使用的標準化方法,可以在不同介面之間進行通訊互動。

在本文中,介紹了所有最常見的請求方法:GET、POST、PUT和DELETE。以及一些HTTP狀態程式碼:200、401和404。

最後,我們還學習了如何在本地託管我們的API並通過 Postman 對其進行測試,從而讓我們能夠快速診斷問題並確保我們的API正常執行。

總而言之,API開發對於開發人員來說,幾乎是任何其他技術領域都是至關重要的技能。

--END--

上文中的所有程式碼,都能在GitHub上找到:https://gist.github.com/jamescalam/0b309d275999f9df26fa063602753f73

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 建立簡單聊天AI機器人