API ialah antara muka pengaturcaraan aplikasi, ia boleh difahami sebagai saluran untuk berkomunikasi dengan sistem perisian yang berbeza. Ia pada asasnya adalah fungsi yang telah ditetapkan.
API mempunyai banyak bentuk, yang paling popular ialah menggunakan protokol HTTP untuk menyediakan perkhidmatan (seperti: RESTful), selagi ia memenuhi peraturan boleh digunakan seperti biasa. Pada masa kini, banyak perusahaan menggunakan API yang disediakan oleh pihak ketiga, dan juga menyediakan API untuk pihak ketiga, jadi reka bentuk API juga perlu berhati-hati.
Jelaskan Fungsi
Pada permulaan reka bentuk, anda perlu menyusun fungsi API mengikut titik atau modul fungsi perniagaan untuk menjelaskan bahawa API anda perlu menyediakan.
Kosongkan Logik Kod
Pastikan kod anda kemas dan tambahkan ulasan yang diperlukan untuk memastikan antara muka mempunyai satu fungsi. Jika antara muka memerlukan logik perniagaan yang kompleks, adalah disyorkan untuk membahagikannya kepada berbilang antara muka atau merangkum fungsi ke dalam kaedah awam secara bebas untuk mengelakkan terlalu banyak kod dalam antara muka, yang tidak kondusif untuk penyelenggaraan dan lelaran kemudian.
Jumlah Semakan Keselamatan yang Diperlukan
Penyelesaian biasa ialah menggunakan tandatangan digital. Tambahkan tandatangan pada setiap permintaan HTTP dan bahagian pelayan mengesahkan kesahihan tandatangan untuk memastikan kesahihan permintaan.
Membalak
Pembalakan adalah penting untuk memudahkan penyetempatan masalah tepat pada masanya.
Minimumkan Gandingan
API yang baik hendaklah semudah mungkin. Jika gandingan perniagaan antara API terlalu tinggi, adalah mudah untuk menyebabkan pengecualian dalam kod tertentu, mengakibatkan ketiadaan API yang berkaitan. Jadi adalah lebih baik untuk mengelakkan kerumitan hubungan antara API sebanyak mungkin.
Kembalikan Kod Status Bermakna
Data kod status hendaklah dibawa dalam data pulangan API. Sebagai contoh, 200 bermakna permintaan adalah normal, 500 bermakna terdapat ralat dalaman dalam pelayan. Mengembalikan kod status biasa adalah baik untuk penyetempatan masalah.
Dokumentasi Pembangunan
Memandangkan API disediakan untuk kegunaan pihak ketiga atau dalaman, dokumentasi pembangunan adalah penting, jika tidak, ia tidak akan diketahui oleh orang lain cara menggunakannya.
Dokumentasi pembangunan API yang baik harus mengandungi elemen berikut:
Jika berpuas hati dengan persekitaran pembangunan, mungkin kurang daripada 10 minit, anda boleh melengkapkan pembangunan antara muka API yang mudah (hanya demo).
Sebelum pembangunan, anda perlu memasang JDK, Maven dan IDE.
Buat projek baharu berdasarkan Spring Boot. Untuk menyelesaikan dengan cepat, saya memilih untuk menggunakan (start.spring.io) untuk menjana projek saya. Melalui [Search dependencies to add] anda boleh memilih pakej. Saya hanya mengimport Spring MVC, jika anda perlu mengakses pangkalan data melalui Mybatis, anda juga boleh memilih di sini, kemudian klik untuk menjana projek.
Nyahzip projek yang dimuat turun dan masukkan ke dalam IDE anda, kemudian untuk mencipta kelas baharu: com.wukong.apidemo.controller.ApiController.
Tambahkan kaedah dalam kelas ini, penggunaan utama tag @RestController, @RequestMapping, @ResponseBody.
Antara muka API yang paling mudah telah dilengkapkan. Kami boleh memulakan projek, mengakses alamat antara muka yang sepadan dan mendapatkan maklumat pemulangan antara muka.
Kami boleh menggunakan swagger untuk membantu kami menjana dokumentasi antara muka dan mengoptimumkan antara muka API.
Kelalang Python dan Java Spring Boot boleh digunakan untuk mencipta antara muka API dengan cekap.
Spring Boot telah memudahkan proses pembangunan kepada yang mudah. Untuk python, saya mengesyorkan pakej pihak ketiga untuk membangunkan antara muka API: fastapi.
Ia adalah alat yang pantas dan cekap dengan ciri berikut:
Bina API RESTful nampaknya merupakan kerja pembangun, malah, terdapat banyak senario di mana pembangun ujian perlu membina API RESTful.
Sesetengah penguji akan membina API RESTful, merampas nama domain sebelah pelayan ke API mereka sendiri dan mengembalikan semua jenis pengecualian dengan tujuan untuk melihat kestabilan klien.
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
Keperluan: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 seperti berikut:
Kelalang - rangka kerja mikro untuk python
Flask_restful - sambungan kepada flask untuk membina REST API dengan cepat.
Flask_script - menyediakan sokongan untuk menulis skrip luaran dalam flask.
Flask_migrate - gunakan apl Flask Alembic untuk pemindahan pangkalan data SQLAlchemy.
Marshmallow - untuk jenis data kompleks dan penukaran jenis data python.
Flask_sqlalchemy - sambungan flask yang menambah sokongan untuk SQLAlchemy.
Flask_marshmallow - lapisan tengah antara flask dan marshmallow.
Marshmallow-sqlalchemy - lapisan tengah antara sqlalchemy dan marshmallow.
psycopg - API PostgreSQL untuk python.
Pasang kebergantungan
project/ ├── app.py ├── config.py ├── migrate.py ├── Model.py ├── requirements.txt ├── resources │ └── Hello.py │ └── Comment.py │ └── Category.py └── run.py
Pasang dan Konfigurasi PostgreSQL(Ambil Ubuntu 16.04 sebagai contoh)
# pip3 install -r requirements.txt
Tatarajah
# 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';"
Mula Pantas
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')
sumber/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!"}
Memulakan perkhidmatan
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)
Gunakan pelayar untuk melawati: 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
Akses kepada pangkalan data
{ "hello": "world" }
hijrah.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()
penghijrahan data
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()
Ujian
Anda boleh menggunakan curl, contohnya:
$ python3 migrate.py db init $ python3 migrate.py db migrate $ python migrate.py db upgrade
Atas ialah kandungan terperinci Bagaimana untuk membuat antara muka API?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!