如何製作API介面?
API是應用程式介面,可以理解為與不同軟體系統通訊的通道。它本質上是一個預先定義的函數。
API有多種形式,最受歡迎的一種是使用HTTP協定提供服務(如:RESTful),只要符合規定就可以正常使用。現在很多企業都使用第三方提供的API,也提供第三方API,所以API的設計也需要謹慎。
如何設計一個好的API介面?
闡明功能
在設計之初,你需要依照商業功能點或模組來組織API的功能,明確你的API需要提供的清晰的程式碼邏輯
保持程式碼整潔並添加必要的註釋以確保介面具有單一功能。如果接口需要複雜的業務邏輯,建議將其拆分為多個接口,或者將功能獨立封裝成公共方法,避免接口中代碼過多,不利於維護和後期迭代。必要的安全校驗和
常見的解決方案是使用數位簽章。為每個HTTP請求新增簽名,伺服器端驗證簽名的有效性,確保請求的真實性。記錄
日誌記錄對於及時定位問題至關重要。最小化耦合
一個好的 API 應該盡量簡單。如果API之間的業務耦合度太高,很容易導致某段程式碼出現異常,導致相關API無法使用。所以還是盡量避免API之間關係的複雜性吧。傳回有意義的狀態碼
API回傳資料中應攜帶狀態碼資料。例如,200表示請求正常,500表示伺服器出現內部錯誤。傳回通用的狀態碼有利於問題定位。開發文件
由於API是提供給第三方或內部使用的,所以開發文件是必不可少的,否則別人不知道如何使用。
一個好的API開發文件應該包含以下元素:
- API架構模型描述、開發工具及版本、系統相依等環境資訊。
- API提供的功能。
- API 模組相依性。
- 呼叫規則、註解。
- 部署說明等
如何開發API介面?
如果對開發環境滿意,大概不到10分鐘,就可以完成一個簡單API介面的開發(只是一個demo)。
開發前需要安裝JDK、Maven和IDE。
建立一個基於Spring Boot的新專案。為了快速完成,我選擇使用(start.spring.io)來產生我的專案。透過【搜尋要新增的依賴項】可以選擇套件。我只導入了Spring MVC,如果需要透過Mybatis存取資料庫,也可以選擇這裡,然後點擊生成項目。
解壓縮下載的專案並將其引入到您的IDE中,然後建立一個新類別:com.wukong.apidemo.controller.ApiController。
在這個類別中加入一個方法,主要使用@RestController、@RequestMapping、@ResponseBody標籤。
最簡單的API介面已經完成。我們可以啟動項目,存取對應的介面位址,並取得介面返回資訊。
我們可以使用swagger來幫助我們產生介面文檔,並最佳化API介面。
更有效率的API介面製作方法?
Python Flask 和 Java Spring Boot 都可以用來有效率地建立 API 介面。
Spring Boot 將開發過程簡化為簡單。對於python,我推薦一個用於開發API介面的第三方包:fastapi。
這是一個快速且有效率的工具,具有以下功能:
- 快速:與 NodeJS 和 Go 相當。最快的 Python 框架之一。
- 快速編碼:將開發速度提高約 200% 至 300%。
- 更少的錯誤:減少開發人員造成的約 40% 的錯誤。
- 簡單:易於使用和學習。花在閱讀文件上的時間更少。
- 基於標準:基於且完全相容API的開放標準。
使用Python3和Flask製作RESTful API(介面測試服務和Mockserver工具)
建立 RESTful API 似乎是開發人員的工作,事實上,有許多場景需要測試開發人員建立 RESTful API。
有些測試人員會建立RESTful API,將伺服器端網域名稱劫持到自己的API上,故意傳回各種異常,以查看客戶端的穩定性。
REST: REpresentational State Transfer GET - /api/Category - Retrieve all categories POST - /api/Category - Add a new category PUT - /api/Category - Update a category DELETE - /api/Category - Delete a category GET - /api/Comment - Retrieve all the stored comments POST - /api/Comment - Add new comment
要求:python3.*,PostgreSQL.
REST: REpresentational State Transfer GET - /api/Category - Retrieve all categories POST - /api/Category - Add a new category PUT - /api/Category - Update a category DELETE - /api/Category - Delete a category GET - /api/Comment - Retrieve all the stored comments POST - /api/Comment - Add new comment
Requirements.txt如下:
Flask - python 微框架
Flask_restful - Flask 的擴展,用於快速建立 REST API。
Flask_script - 提供在 Flask 中編寫外部腳本的支援。
Flask_migrate - 使用 Alembic 的 Flask 應用程式進行 SQLAlchemy 資料庫遷移。
Marshmallow - 用於複雜資料類型和 python 資料類型轉換。
Flask_sqlalchemy - 新增了對 SQLAlchemy 的支援的 Flask 擴充。
Flask_marshmallow - 燒瓶與棉花糖之間的中間層。
Marshmallow-sqlalchemy - sqlalchemy 與 marshmallow 之間的中間層。
psycopg - 用於 python 的 PostgreSQL API。
安裝依賴項
project/ ├── app.py ├── config.py ├── migrate.py ├── Model.py ├── requirements.txt ├── resources │ └── Hello.py │ └── Comment.py │ └── Category.py └── run.py
安裝並設定PostgreSQL(以Ubuntu 16.04為例)
# pip3 install -r requirements.txt
配置
# sudo apt-get update && sudo apt-get upgrade # apt-get install postgresql postgresql-contrib # su - postgres $ createdb api $ createuser andrew --pwprompt #Create User $ psql -d api -c "ALTER USER andrew WITH PASSWORD 'api';"
快速入門
app.py
from flask import Blueprint from flask_restful import Api from resources.Hello import Hello from resources.Category import CategoryResource from resources.Comment import CommentResource api_bp = Blueprint('api', __name__) api = Api(api_bp) # Routes api.add_resource(Hello, '/Hello') api.add_resource(CategoryResource, '/Category') api.add_resource(CommentResource, '/Comment')
資源/Hello.py
from flask import Blueprint from flask_restful import Api from resources.Hello import Hello api_bp = Blueprint('api', __name__) api = Api(api_bp) # Route api.add_resource(Hello, '/Hello')
run.py
#!/usr/bin/python # -*- coding: utf-8 -*- # Author: xurongzhong#126.com wechat:pythontesting qq:37391319 # CreateDate: 2018-1-10 from flask_restful import Resource class Hello(Resource): def get(self): return {"message": "Hello, World!"} def post(self): return {"message": "Hello, World!"}
開始服務
from flask import Flask def create_app(config_filename): app = Flask(__name__) app.config.from_object(config_filename) from app import api_bp app.register_blueprint(api_bp, url_prefix='/api') return app if __name__ == "__main__": app = create_app("config") app.run(debug=True)
使用瀏覽器:http://127.0.0.1:5000/api/Hello
$ python3 run.py * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 136-695-873
存取資料庫
{ "hello": "world" }
遷移.py
from flask import Flask from marshmallow import Schema, fields, pre_load, validate from flask_marshmallow import Marshmallow from flask_sqlalchemy import SQLAlchemy ma = Marshmallow() db = SQLAlchemy() class Comment(db.Model): __tablename__ = 'comments' id = db.Column(db.Integer, primary_key=True) comment = db.Column(db.String(250), nullable=False) creation_date = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), nullable=False) category_id = db.Column(db.Integer, db.ForeignKey('categories.id', ondelete='CASCADE'), nullable=False) category = db.relationship('Category', backref=db.backref('comments', lazy='dynamic' )) def __init__(self, comment, category_id): self.comment = comment self.category_id = category_id class Category(db.Model): __tablename__ = 'categories' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(150), unique=True, nullable=False) def __init__(self, name): self.name = name class CategorySchema(ma.Schema): id = fields.Integer() name = fields.String(required=True) class CommentSchema(ma.Schema): id = fields.Integer(dump_only=True) category_id = fields.Integer(required=True) comment = fields.String(required=True, validate=validate.Length(1)) creation_date = fields.DateTime()
資料遷移
from flask_script import Manager from flask_migrate import Migrate, MigrateCommand from Model import db from run import create_app app = create_app('config') migrate = Migrate(app, db) manager = Manager(app) manager.add_command('db', MigrateCommand) if __name__ == '__main__': manager.run()
測試
您可以使用curl,例如:
$ python3 migrate.py db init $ python3 migrate.py db migrate $ python migrate.py db upgrade
以上是如何製作API介面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

實現視差滾動和元素動畫效果的探討本文將探討如何實現類似資生堂官網(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

如何在JavaScript中將具有相同ID的數組元素合併到一個對像中?在處理數據時,我們常常會遇到需要將具有相同ID�...

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

探索前端中類似VSCode的面板拖拽調整功能的實現在前端開發中,如何實現類似於VSCode...
