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中文網其他相關文章!

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

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

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版
好用的JavaScript開發工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Atom編輯器mac版下載
最受歡迎的的開源編輯器