国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

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

如何制作API接口?

Dec 09, 2024 pm 12:28 PM

How to make an API interface?

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

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

如何設(shè)計(jì)一個(gè)好的API接口?

  1. 闡明功能
    在設(shè)計(jì)之初,你需要按照業(yè)務(wù)功能點(diǎn)或者模塊來(lái)組織API的功能,明確你的API需要提供的

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

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

  4. 記錄
    日志記錄對(duì)于及時(shí)定位問(wèn)題至關(guān)重要。

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

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

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

一個(gè)好的API開(kāi)發(fā)文檔應(yīng)該包含以下元素:

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

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

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

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

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

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

  3. 在這個(gè)類中添加一個(gè)方法,主要使用@RestController、@RequestMapping、@ResponseBody標(biāo)簽。

  4. 最簡(jiǎn)單的API接口已經(jīng)完成。我們可以啟動(dòng)項(xiàng)目,訪問(wèn)對(duì)應(yīng)的接口地址,并獲取接口返回信息。

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

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

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

Spring Boot 將開(kāi)發(fā)過(guò)程簡(jiǎn)化為簡(jiǎn)單。對(duì)于python,我推薦一個(gè)用于開(kāi)發(fā)API接口的第三方包:fastapi。

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

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

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

構(gòu)建 RESTful API 似乎是開(kāi)發(fā)人員的工作,事實(shí)上,有很多場(chǎng)景需要測(cè)試開(kāi)發(fā)人員構(gòu)建 RESTful API。

有些測(cè)試人員會(huì)構(gòu)建RESTful API,將服務(wù)器端域名劫持到自己的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 的擴(kuò)展,用于快速構(gòu)建 REST API。
Flask_script - 提供在 Flask 中編寫外部腳本的支持。
Flask_migrate - 使用 Alembic 的 Flask 應(yīng)用程序進(jìn)行 SQLAlchemy 數(shù)據(jù)庫(kù)遷移。
Marshmallow - 用于復(fù)雜數(shù)據(jù)類型和 python 數(shù)據(jù)類型轉(zhuǎn)換。
Flask_sqlalchemy - 添加了對(duì) SQLAlchemy 的支持的 Flask 擴(kuò)展。
Flask_marshmallow - 燒瓶和棉花糖之間的中間層。
Marshmallow-sqlalchemy - sqlalchemy 和 marshmallow 之間的中間層。
psycopg - 用于 python 的 PostgreSQL API。

安裝依賴項(xiàng)

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!"}

開(kāi)始服務(wù)

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)

使用瀏覽器訪問(wèn):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

訪問(wèn)數(shù)據(jù)庫(kù)

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

測(cè)試
您可以使用curl,例如:

$ python3 migrate.py db init
$ python3 migrate.py db migrate
$ python migrate.py db upgrade

以上是如何制作API接口?的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語(yǔ)言,各自適用于不同的應(yīng)用場(chǎng)景。Java用于大型企業(yè)和移動(dòng)應(yīng)用開(kāi)發(fā),而JavaScript主要用于網(wǎng)頁(yè)開(kāi)發(fā)。

JavaScript評(píng)論:簡(jiǎn)短說(shuō)明 JavaScript評(píng)論:簡(jiǎn)短說(shuō)明 Jun 19, 2025 am 12:40 AM

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

如何在JS中與日期和時(shí)間合作? 如何在JS中與日期和時(shí)間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時(shí)間處理需注意以下幾點(diǎn):1.創(chuàng)建Date對(duì)象有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開(kāi)始;3.手動(dòng)格式化日期需拼接字符串,也可使用第三方庫(kù);4.處理時(shí)區(qū)問(wèn)題建議使用支持時(shí)區(qū)的庫(kù),如Luxon。掌握這些要點(diǎn)能有效避免常見(jiàn)錯(cuò)誤。

為什么要將標(biāo)簽放在的底部? 為什么要將標(biāo)簽放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript與Java:開(kāi)發(fā)人員的全面比較 JavaScript與Java:開(kāi)發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

什么是在DOM中冒泡和捕獲的事件? 什么是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個(gè)階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。1.事件捕獲通過(guò)addEventListener的useCapture參數(shù)設(shè)為true實(shí)現(xiàn);2.事件冒泡是默認(rèn)行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委托,提高動(dòng)態(tài)內(nèi)容處理效率;5.捕獲可用于提前攔截事件,如日志記錄或錯(cuò)誤處理。了解這兩個(gè)階段有助于精確控制JavaScript響應(yīng)用戶操作的時(shí)機(jī)和方式。

JavaScript:探索用于高效編碼的數(shù)據(jù)類型 JavaScript:探索用于高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

如何減少JavaScript應(yīng)用程序的有效載荷大??? 如何減少JavaScript應(yīng)用程序的有效載荷大??? Jun 26, 2025 am 12:54 AM

如果JavaScript應(yīng)用加載慢、性能差,問(wèn)題往往出在payload太大,解決方法包括:1.使用代碼拆分(CodeSplitting),通過(guò)React.lazy()或構(gòu)建工具將大bundle拆分為多個(gè)小文件,按需加載以減少首次下載量;2.移除未使用的代碼(TreeShaking),利用ES6模塊機(jī)制清除“死代碼”,確保引入的庫(kù)支持該特性;3.壓縮和合并資源文件,啟用Gzip/Brotli和Terser壓縮JS,合理合并文件并優(yōu)化靜態(tài)資源;4.替換重型依賴,選用輕量級(jí)庫(kù)如day.js、fetch

See all articles