API はアプリケーション プログラミング インターフェイスであり、さまざまなソフトウェア システムと通信するためのチャネルとして理解できます。これは本質的に事前定義された関数です。
API にはさまざまな形式がありますが、最も一般的なのは HTTP プロトコルを使用してサービスを提供するもの (例: RESTful) であり、規定を満たしていれば正常に使用できます。現在、多くの企業がサードパーティが提供する API を使用しており、サードパーティ向けの API も提供しているため、API の設計にも注意が必要です。
機能を明確にする
設計の初めに、ビジネス機能ポイントまたはモジュールに従って API の機能を整理し、API が提供する必要があるものを明確にする必要があります。
明確なコードロジック
コードを整理し、必要なコメントを追加して、インターフェイスが単一の機能を持つようにします。インターフェイスに複雑なビジネス ロジックが必要な場合は、インターフェイス内のコードが多すぎるのを避けるために、インターフェイスを複数のインターフェイスに分割するか、関数をパブリック メソッドに個別にカプセル化することをお勧めします。これはメンテナンスや後の反復に役立ちません。
必要なセキュリティ チェックサム
一般的な解決策は、デジタル署名を使用することです。各 HTTP リクエストに署名を追加すると、サーバー側で署名の有効性が検証され、リクエストの信頼性が保証されます。
ロギング
問題のタイムリーな特定を促進するには、ログの記録が不可欠です。
結合を最小限に抑える
優れた API は、できるだけシンプルである必要があります。 API 間のビジネス結合が高すぎると、特定のコードで例外が発生しやすくなり、その結果、関連する API が使用できなくなります。したがって、API 間の関係の複雑さはできる限り避けたほうがよいでしょう。
意味のあるステータス コードを返す
ステータス コード データは API 戻りデータに含める必要があります。たとえば、200 はリクエストが正常であることを意味し、500 はサーバーに内部エラーがあることを意味します。共通のステータス コードを返すと、問題の場所を特定するのに役立ちます。
開発ドキュメント
API はサードパーティまたは社内での使用を目的として提供されているため、開発ドキュメントは必須です。そうしないと、その使用方法が他人に知られません。
優れた API 開発ドキュメントには次の要素が含まれている必要があります:
開発環境に満足している場合は、おそらく 10 分以内に、単純な API インターフェイス (単なるデモ) の開発を完了できます。
開発の前に、JDK、Maven、IDE をインストールする必要があります。
Spring Boot に基づいて新しいプロジェクトを作成します。すばやく完了するために、(start.spring.io) を使用してプロジェクトを生成することを選択します。 [追加する依存関係の検索]からパッケージを選択できます。 Spring MVC のみをインポートしました。Mybatis 経由でデータベースにアクセスする必要がある場合は、ここで選択して、クリックしてプロジェクトを生成することもできます。
ダウンロードしたプロジェクトを解凍して IDE に導入し、新しいクラス com.wukong.apidemo.controller.ApiController.
このクラスにメソッドを追加します。主に @RestController、@RequestMapping、@ResponseBody タグを使用します。
最も単純な API インターフェースが完成しました。プロジェクトを開始し、対応するインターフェイス アドレスにアクセスし、インターフェイスの戻り情報を取得できます。
Swagger を使用すると、インターフェースのドキュメントを生成し、API インターフェースを最適化できます。
Python Flask と Java Spring Boot の両方を使用して、API インターフェイスを効率的に作成できます。
Spring Boot により、開発プロセスが単純化されました。 Python の場合、API インターフェイスを開発するためのサードパーティ パッケージ fastapi をお勧めします。
これは、次の機能を備えた高速で効率的なツールです:
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 - 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 サイトの他の関連記事を参照してください。