ホームページ > ウェブフロントエンド > jsチュートリアル > APIインターフェースはどのように作るのでしょうか?

APIインターフェースはどのように作るのでしょうか?

Linda Hamilton
リリース: 2024-12-09 12:28:15
オリジナル
357 人が閲覧しました

How to make an API interface?

API はアプリケーション プログラミング インターフェイスであり、さまざまなソフトウェア システムと通信するためのチャネルとして理解できます。これは本質的に事前定義された関数です。

API にはさまざまな形式がありますが、最も一般的なのは HTTP プロトコルを使用してサービスを提供するもの (例: RESTful) であり、規定を満たしていれば正常に使用できます。現在、多くの企業がサードパーティが提供する API を使用しており、サードパーティ向けの API も提供しているため、API の設計にも注意が必要です。

優れた API インターフェースを設計するにはどうすればよいですか?

  1. 機能を明確にする
    設計の初めに、ビジネス機能ポイントまたはモジュールに従って API の機能を整理し、API が提供する必要があるものを明確にする必要があります。

  2. 明確なコードロジック
    コードを整理し、必要なコメントを追加して、インターフェイスが単一の機能を持つようにします。インターフェイスに複雑なビジネス ロジックが必要な場合は、インターフェイス内のコードが多すぎるのを避けるために、インターフェイスを複数のインターフェイスに分割するか、関数をパブリック メソッドに個別にカプセル化することをお勧めします。これはメンテナンスや後の反復に役立ちません。

  3. 必要なセキュリティ チェックサム
    一般的な解決策は、デジタル署名を使用することです。各 HTTP リクエストに署名を追加すると、サーバー側で署名の有効性が検証され、リクエストの信頼性が保証されます。

  4. ロギング
    問題のタイムリーな特定を促進するには、ログの記録が不可欠です。

  5. 結合を最小限に抑える
    優れた API は、できるだけシンプルである必要があります。 API 間のビジネス結合が高すぎると、特定のコードで例外が発生しやすくなり、その結果、関連する API が使用できなくなります。したがって、API 間の関係の複雑さはできる限り避けたほうがよいでしょう。

  6. 意味のあるステータス コードを返す
    ステータス コード データは API 戻りデータに含める必要があります。たとえば、200 はリクエストが正常であることを意味し、500 はサーバーに内部エラーがあることを意味します。共通のステータス コードを返すと、問題の場所を特定するのに役立ちます。

  7. 開発ドキュメント
    API はサードパーティまたは社内での使用を目的として提供されているため、開発ドキュメントは必須です。そうしないと、その使用方法が他人に知られません。

優れた API 開発ドキュメントには次の要素が含まれている必要があります:

  1. API アーキテクチャ モデルの説明、開発ツールとバージョン、システムの依存関係、その他の環境情報。
  2. API によって提供される機能。
  3. API モジュールの依存関係。
  4. 呼び出しルール、メモ。
  5. 導入メモなど

API インターフェースを開発するにはどうすればよいですか?

開発環境に満足している場合は、おそらく 10 分以内に、単純な API インターフェイス (単なるデモ) の開発を完了できます。

開発の前に、JDK、Maven、IDE をインストールする必要があります。

  1. Spring Boot に基づいて新しいプロジェクトを作成します。すばやく完了するために、(start.spring.io) を使用してプロジェクトを生成することを選択します。 [追加する依存関係の検索]からパッケージを選択できます。 Spring MVC のみをインポートしました。Mybatis 経由でデータベースにアクセスする必要がある場合は、ここで選択して、クリックしてプロジェクトを生成することもできます。

  2. ダウンロードしたプロジェクトを解凍して IDE に導入し、新しいクラス com.wukong.apidemo.controller.ApiController.

  3. を作成します。
  4. このクラスにメソッドを追加します。主に @RestController、@RequestMapping、@ResponseBody タグを使用します。

  5. 最も単純な API インターフェースが完成しました。プロジェクトを開始し、対応するインターフェイス アドレスにアクセスし、インターフェイスの戻り情報を取得できます。

  6. Swagger を使用すると、インターフェースのドキュメントを生成し、API インターフェースを最適化できます。

API インターフェースを作成するより効率的な方法は?

Python Flask と Java Spring Boot の両方を使用して、API インターフェイスを効率的に作成できます。

Spring Boot により、開発プロセスが単純化されました。 Python の場合、API インターフェイスを開発するためのサードパーティ パッケージ fastapi をお勧めします。

これは、次の機能を備えた高速で効率的なツールです:

  1. 高速: NodeJS や Go に匹敵します。最速の Python フレームワークの 1 つ。
  2. 高速コーディング: 開発速度が約 200% ~ 300% 向上します。
  3. エラーの減少: 開発者によって引き起こされるエラーの約 40% を削減します。
  4. シンプル: 使いやすく、学びやすい。ドキュメントを読むのに費やす時間が減ります。
  5. 標準ベース: API のオープン標準に基づいており、完全な互換性があります。

Python3とFlaskでRESTful APIを作る(インターフェーステストサービスとモックサーバーツール)

RESTful API の構築は開発者の仕事であるように見えますが、実際には、テスト開発者が RESTful API を構築する必要があるシナリオが数多くあります。

一部のテスターは、R​​ESTful 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 - REST API を迅速に構築するための flask の拡張機能。
Flask_script - Flask での外部スクリプトの作成のサポートを提供します。
Flask_merge - SQLAlchemy データベースの移行には Alembic の Flask アプリを使用します。
Marshmallow - 複雑なデータ型と Python データ型変換用。
Flask_sqlalchemy - SQLAlchemy のサポートを追加する flask 拡張機能。
Flask_marshmallow - フラスコとマシュマロの間の中間層。
マシュマロ-sqlalchemy - sqlalchemy とマシュマロの間の中間層。
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 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート