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

首頁 web前端 js教程 如何製作API介面?

如何製作API介面?

Dec 09, 2024 pm 12:28 PM

How to make an API interface?

API是應(yīng)用程式介面,可以理解為與不同軟體系統(tǒng)通訊的通道。它本質(zhì)上是一個(gè)預(yù)先定義的函數(shù)。

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

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

  1. 闡明功能
    在設(shè)計(jì)之初,你需要依照商業(yè)功能點(diǎn)或模組來組織API的功能,明確你的API需要提供的

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

  3. 必要的安全校驗(yàn)和
    常見的解決方案是使用數(shù)位簽章。為每個(gè)HTTP請求新增簽名,伺服器端驗(yàn)證簽名的有效性,確保請求的真實(shí)性。

  4. 記錄
    日誌記錄對於及時(shí)定位問題至關(guān)重要。

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

  6. 傳回有意義的狀態(tài)碼
    API回傳資料中應(yīng)攜帶狀態(tài)碼資料。例如,200表示請求正常,500表示伺服器出現(xiàn)內(nèi)部錯(cuò)誤。傳回通用的狀態(tài)碼有利於問題定位。

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

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

  1. API架構(gòu)模型描述、開發(fā)工具及版本、系統(tǒng)相依等環(huán)境資訊。
  2. API提供的功能。
  3. API 模組相依性。
  4. 呼叫規(guī)則、註解。
  5. 部署說明等

如何開發(fā)API介面?

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

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

  1. 建立一個(gè)基於Spring Boot的新專案。為了快速完成,我選擇使用(start.spring.io)來產(chǎn)生我的專案。透過【搜尋要新增的依賴項(xiàng)】可以選擇套件。我只導(dǎo)入了Spring MVC,如果需要透過Mybatis存取資料庫,也可以選擇這裡,然後點(diǎn)擊生成項(xiàng)目。

  2. 解壓縮下載的專案並將其引入到您的IDE中,然後建立一個(gè)新類別:com.wukong.apidemo.controller.ApiController。

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

  4. 最簡單的API介面已經(jīng)完成。我們可以啟動項(xiàng)目,存取對應(yīng)的介面位址,並取得介面返回資訊。

  5. 我們可以使用swagger來幫助我們產(chǎn)生介面文檔,並最佳化API介面。

更有效率的API介面製作方法?

Python Flask 和 Java Spring Boot 都可以用來有效率地建立 API 介面。

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

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

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

使用Python3和Flask製作RESTful API(介面測試服務(wù)和Mockserver工具)

建立 RESTful API 似乎是開發(fā)人員的工作,事實(shí)上,有許多場景需要測試開發(fā)人員建立 RESTful API。

有些測試人員會建立RESTful API,將伺服器端網(wǎng)域名稱劫持到自己的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ò)展,用於快速建立 REST API。
Flask_script - 提供在 Flask 中編寫外部腳本的支援。
Flask_migrate - 使用 Alembic 的 Flask 應(yīng)用程式進(jìn)行 SQLAlchemy 資料庫遷移。
Marshmallow - 用於複雜資料類型和 python 資料類型轉(zhuǎn)換。
Flask_sqlalchemy - 新增了對 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

安裝並設(shè)定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!"}

開始服務(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)

使用瀏覽器: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介面?的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

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整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

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

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

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

JavaScript評論:簡短說明 JavaScript評論:簡短說明 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對像有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開始;3.手動格式化日期需拼接字符串,也可使用第三方庫;4.處理時(shí)區(qū)問題建議使用支持時(shí)區(qū)的庫,如Luxon。掌握這些要點(diǎn)能有效避免常見錯(cuò)誤。

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

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

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

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

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

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

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

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

See all articles