亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 web前端 js教程 如何制作API接口?

如何制作API接口?

Dec 09, 2024 pm 12:28 PM

How to make an API interface?

API是應用程序編程接口,可以理解為與不同軟件系統(tǒng)進行通信的通道。它本質(zhì)上是一個預定義的函數(shù)。

API有多種形式,最流行的一種是使用HTTP協(xié)議提供服務(如:RESTful),只要符合規(guī)定就可以正常使用。現(xiàn)在很多企業(yè)都使用第三方提供的API,也為第三方提供API,所以API的設計也需要謹慎。

如何設計一個好的API接口?

  1. 闡明功能
    在設計之初,你需要按照業(yè)務功能點或者模塊來組織API的功能,明確你的API需要提供的

  2. 清晰的代碼邏輯
    保持代碼整潔并添加必要的注釋以確保界面具有單一功能。如果接口需要復雜的業(yè)務邏輯,建議將其拆分為多個接口,或者將功能獨立封裝成公共方法,避免接口中代碼過多,不利于維護和后期迭代。

  3. 必要的安全校驗和
    常見的解決方案是使用數(shù)字簽名。為每個HTTP請求添加簽名,服務器端驗證簽名的有效性,確保請求的真實性。

  4. 記錄
    日志記錄對于及時定位問題至關重要。

  5. 最小化耦合
    一個好的 API 應該盡可能簡單。如果API之間的業(yè)務耦合度太高,很容易導致某段代碼出現(xiàn)異常,導致相關API不可用。所以還是盡量避免API之間關系的復雜性吧。

  6. 返回有意義的狀態(tài)代碼
    API返回數(shù)據(jù)中應攜帶狀態(tài)碼數(shù)據(jù)。例如,200表示請求正常,500表示服務器出現(xiàn)內(nèi)部錯誤。返回通用的狀態(tài)碼有利于問題定位。

  7. 開發(fā)文檔
    由于API是提供給第三方或內(nèi)部使用的,所以開發(fā)文檔是必不可少的,否則別人不知道如何使用。

一個好的API開發(fā)文檔應該包含以下元素:

  1. API架構(gòu)模型描述、開發(fā)工具及版本、系統(tǒng)依賴等環(huán)境信息。
  2. API提供的功能。
  3. API 模塊依賴項。
  4. 調(diào)用規(guī)則、注釋。
  5. 部署說明等

如何開發(fā)API接口?

如果對開發(fā)環(huán)境滿意,大概不到10分鐘,就可以完成一個簡單API接口的開發(fā)(只是一個demo)。

開發(fā)前需要安裝JDK、Maven和IDE。

  1. 創(chuàng)建一個基于Spring Boot的新項目。為了快速完成,我選擇使用(start.spring.io)來生成我的項目。通過【搜索要添加的依賴項】可以選擇包。我只導入了Spring MVC,如果需要通過Mybatis訪問數(shù)據(jù)庫,也可以選擇這里,然后點擊生成項目。

  2. 解壓下載的項目并將其引入到您的IDE中,然后創(chuàng)建一個新類:com.wukong.apidemo.controller.ApiController。

  3. 在這個類中添加一個方法,主要使用@RestController、@RequestMapping、@ResponseBody標簽。

  4. 最簡單的API接口已經(jīng)完成。我們可以啟動項目,訪問對應的接口地址,并獲取接口返回信息。

  5. 我們可以使用swagger來幫助我們生成接口文檔,優(yōu)化API接口。

更高效的API接口制作方法?

Python Flask 和 Java Spring Boot 都可以用來高效創(chuàng)建 API 接口。

Spring Boot 將開發(fā)過程簡化為簡單。對于python,我推薦一個用于開發(fā)API接口的第三方包:fastapi。

這是一個快速高效的工具,具有以下功能:

  1. 快速:與 NodeJS 和 Go 相當。最快的 Python 框架之一。
  2. 快速編碼:將開發(fā)速度提高約 200% 至 300%。
  3. 更少的錯誤:減少開發(fā)人員造成的約 40% 的錯誤。
  4. 簡單:易于使用和學習?;ㄔ陂喿x文檔上的時間更少。
  5. 基于標準:基于并完全兼容API的開放標準。

使用Python3和Flask制作RESTful API(接口測試服務和Mockserver工具)

構(gòu)建 RESTful API 似乎是開發(fā)人員的工作,事實上,有很多場景需要測試開發(fā)人員構(gòu)建 RESTful API。

有些測試人員會構(gòu)建RESTful API,將服務器端域名劫持到自己的API上,故意返回各種異常,以查看客戶端的穩(wěn)定性。

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 的擴展,用于快速構(gòu)建 REST API。
Flask_script - 提供在 Flask 中編寫外部腳本的支持。
Flask_migrate - 使用 Alembic 的 Flask 應用程序進行 SQLAlchemy 數(shù)據(jù)庫遷移。
Marshmallow - 用于復雜數(shù)據(jù)類型和 python 數(shù)據(jù)類型轉(zhuǎn)換。
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

訪問數(shù)據(jù)庫

{
    "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()

數(shù)據(jù)遷移

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接口?的詳細內(nèi)容。更多信息請關注PHP中文網(wǎng)其他相關文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
如何在node.js中提出HTTP請求? 如何在node.js中提出HTTP請求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。1.使用內(nèi)置的http/https模塊無需依賴,適合基礎場景,但需手動處理數(shù)據(jù)拼接和錯誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請求;2.axios是基于Promise的第三方庫,語法簡潔且功能強大,支持async/await、自動JSON轉(zhuǎn)換、攔截器等,推薦用于簡化異步請求操作;3.node-fetch提供類似瀏覽器fetch的風格,基于Promise且語法簡單

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時復制副本,因此互不影響;引用類型如對象、數(shù)組和函數(shù)存儲的是內(nèi)存地址,指向同一對象的變量會相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助于編寫更穩(wěn)定可靠的代碼。

React與Angular vs Vue:哪個JS框架最好? React與Angular vs Vue:哪個JS框架最好? Jul 05, 2025 am 02:24 AM

選哪個JavaScript框架最好?答案是根據(jù)需求選擇最適合的。1.React靈活自由,適合需要高度定制、團隊有架構(gòu)能力的中大型項目;2.Angular提供完整解決方案,適合企業(yè)級應用和長期維護的大項目;3.Vue上手簡單,適合中小型項目或快速開發(fā)。此外,是否已有技術(shù)棧、團隊規(guī)模、項目生命周期及是否需要SSR也都是選擇框架的重要因素??傊瑳]有絕對最好的框架,適合自己需求的就是最佳選擇。

JavaScript時間對象,某人構(gòu)建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 JavaScript時間對象,某人構(gòu)建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 Jul 08, 2025 pm 02:27 PM

JavaScript開發(fā)者們,大家好!歡迎閱讀本周的JavaScript新聞!本周我們將重點關注:Oracle與Deno的商標糾紛、新的JavaScript時間對象獲得瀏覽器支持、GoogleChrome的更新以及一些強大的開發(fā)者工具。讓我們開始吧!Oracle與Deno的商標之爭Oracle試圖注冊“JavaScript”商標的舉動引發(fā)爭議。Node.js和Deno的創(chuàng)建者RyanDahl已提交請愿書,要求取消該商標,他認為JavaScript是一個開放標準,不應由Oracle

什么是緩存API?如何與服務人員使用? 什么是緩存API?如何與服務人員使用? Jul 08, 2025 am 02:43 AM

CacheAPI是瀏覽器提供的一種緩存網(wǎng)絡請求的工具,常與ServiceWorker配合使用,以提升網(wǎng)站性能和離線體驗。1.它允許開發(fā)者手動存儲如腳本、樣式表、圖片等資源;2.可根據(jù)請求匹配緩存響應;3.支持刪除特定緩存或清空整個緩存;4.通過ServiceWorker監(jiān)聽fetch事件實現(xiàn)緩存優(yōu)先或網(wǎng)絡優(yōu)先等策略;5.常用于離線支持、加快重復訪問速度、預加載關鍵資源及后臺更新內(nèi)容;6.使用時需注意緩存版本控制、存儲限制及與HTTP緩存機制的區(qū)別。

處理諾言:鏈接,錯誤處理和承諾在JavaScript中 處理諾言:鏈接,錯誤處理和承諾在JavaScript中 Jul 08, 2025 am 02:40 AM

Promise是JavaScript中處理異步操作的核心機制,理解鏈式調(diào)用、錯誤處理和組合器是掌握其應用的關鍵。1.鏈式調(diào)用通過.then()返回新Promise實現(xiàn)異步流程串聯(lián),每個.then()接收上一步結(jié)果并可返回值或Promise;2.錯誤處理應統(tǒng)一使用.catch()捕獲異常,避免靜默失敗,并可在catch中返回默認值繼續(xù)流程;3.組合器如Promise.all()(全成功才成功)、Promise.race()(首個完成即返回)和Promise.allSettled()(等待所有完成)

利用Array.Prototype方法用于JavaScript中的數(shù)據(jù)操作 利用Array.Prototype方法用于JavaScript中的數(shù)據(jù)操作 Jul 06, 2025 am 02:36 AM

JavaScript數(shù)組內(nèi)置方法如.map()、.filter()和.reduce()可簡化數(shù)據(jù)處理;1).map()用于一對一轉(zhuǎn)換元素生成新數(shù)組;2).filter()按條件篩選元素;3).reduce()用于聚合數(shù)據(jù)為單一值;使用時應避免誤用導致副作用或性能問題。

JS綜述:深入研究JavaScript事件循環(huán) JS綜述:深入研究JavaScript事件循環(huán) Jul 08, 2025 am 02:24 AM

JavaScript的事件循環(huán)通過協(xié)調(diào)調(diào)用棧、WebAPI和任務隊列來管理異步操作。1.調(diào)用棧執(zhí)行同步代碼,遇到異步任務時交由WebAPI處理;2.WebAPI在后臺完成任務后將回調(diào)放入相應的隊列(宏任務或微任務);3.事件循環(huán)檢查調(diào)用棧是否為空,若為空則從隊列中取出回調(diào)推入調(diào)用棧執(zhí)行;4.微任務(如Promise.then)優(yōu)先于宏任務(如setTimeout)執(zhí)行;5.理解事件循環(huán)有助于避免阻塞主線程并優(yōu)化代碼執(zhí)行順序。

See all articles