Teknologian jakaminen

Apispec, Python-kirjasto OpenAPI (Swagger) -määritysten luomiseen

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Sisällysluettelo

01 Mikä APIspec on?

Miksi valita Apispec?

Asennus ja konfigurointi

02 Apispecin peruskäyttö

Luo yksinkertainen API-dokumentaatio

1. Luo Apispec-esiintymä

2. Määritä API-reitit ja näkymät

3. Lisää polku Apispeciin

Integroi Flask ja APIspec

1. Asenna Flask ja Flask-Apispec

2. Luo Flask-sovellus

Integroi Django ja APIspec

1. Asenna Django ja Django-Rest-Framework

2. Luo Django-projekteja ja -sovelluksia

3. Määritä Django-projekti

4. Määritä Django-näkymät

5. Määritä URL-osoite

6. Luo OpenAPI-määritys

03Apispecin lisäominaisuudet

1. Mukautettu generaattori

2. Tukee useita kehyksiä

3. Luo automaattisesti käyttöliittymäasiakirjoja

4. Integroi kolmannen osapuolen työkaluihin

04 Käytännön tapaukset

1. Projektin esittely

2. Hankkeen rakenne

3. Asenna riippuvuudet

4. Määrittele malli

5. Määrittele näkymät ja sarjoittaminen

6. Määritä pääsovellus

7. Suorita sovellus ja tarkastele dokumentaatiota

Vieraile osoitteessa http://localhost:5000/swagger/ nähdäksesi luotu API-dokumentaatio.

05 Parhaat käytännöt

06 Yhteenveto



01Mikä on APIspec?

Johdatus API-määrityksiin

Apispec on Python-kirjasto OpenAPI (Swagger) -määritysten luomiseen. Se voi auttaa kehittäjiä luomaan ja ylläpitämään API-asiakirjoja automaattisesti ja tarjoamaan intuitiivisia ja yksityiskohtaisia ​​käyttöliittymäkuvauksia. Apispecin avulla voimme helposti muuntaa Python-funktion tai -luokan dokumentaatiomerkkijonon OpenAPI-spesifikaatioiden mukaiseksi dokumentiksi, mikä vähentää manuaalisen dokumentaation vaivaa.

Miksi valita Apispec?

  • Yksinkertainen ja helppokäyttöinen: Apispec tarjoaa yksinkertaisen ja helppokäyttöisen sovellusliittymän, joten voit aloittaa nopeasti.

  • Joustava ja tehokas: Tukee useita kehyksiä (kuten Flask, Django) ja laajennuksia, joiden avulla voit mukauttaa asiakirjojen luomista tarpeen mukaan.

  • automaatio: Vähennä manuaalisia toimintoja ja ylläpitokustannuksia luomalla ja päivittämällä asiakirjoja automaattisesti.

Asennus ja konfigurointi

Ennen kuin aloitamme Apispecin käytön, meidän on ensin asennettava se. Voit asentaa sen pip:llä:

pip install apispec

Github-projektin osoite:

https://github.com/marshmallow-code/apispec

02APIspecin peruskäyttö

Katsotaanpa Apispecin peruskäyttöä muutaman yksinkertaisen esimerkin kautta.

Luo yksinkertainen API-dokumentaatio

1. Luo Apispec-esiintymä

  1. from apispec import APISpec
  2. spec = APISpec(
  3.     title="My API",
  4.     version="1.0.0",
  5.     openapi_version="3.0.0",
  6.     info=dict(description="This is a sample API"),
  7. )

2. Määritä API-reitit ja näkymät

  1. def get_user(user_id):
  2.     """
  3.     ---
  4.     get:
  5.       description: Get a user by ID
  6.       parameters:
  7.         - name: user_id
  8.           in: path
  9.           required: true
  10.           schema:
  11.             type: integer
  12.       responses:
  13.         200:
  14.           description: A user object
  15.           content:
  16.             application/json:
  17.               schema:
  18.                 type: object
  19.                 properties:
  20.                   id:
  21.                     type: integer
  22.                   name:
  23.                     type: string
  24.     """
  25.     return {"id": user_id, "name""John Doe"}

3. Lisää polku Apispeciin

  1. spec.path(
  2.     path="/users/{user_id}",
  3.     operations=dict(
  4.         get=dict(
  5.             description="Get a user by ID",
  6.             parameters=[
  7.                 {
  8.                     "name""user_id",
  9.                     "in""path",
  10.                     "required"True,
  11.                     "schema": {"type""integer"},
  12.                 }
  13.             ],
  14.             responses={
  15.                 "200": {
  16.                     "description""A user object",
  17.                     "content": {
  18.                         "application/json": {
  19.                             "schema": {
  20.                                 "type""object",
  21.                                 "properties": {
  22.                                     "id": {"type""integer"},
  23.                                     "name": {"type""string"},
  24.                                 },
  25.                             }
  26.                         }
  27.                     },
  28.                 }
  29.             },
  30.         )
  31.     ),
  32. )

Integroi Flask ja APIspec

1. Asenna Flask ja Flask-Apispec

pip install Flask Flask-Apispec

2. Luo Flask-sovellus

  1. from flask import Flask, jsonify
  2. from flask_apispec import FlaskApiSpec, doc, marshal_with
  3. from flask_apispec.views import MethodResource
  4. from marshmallow import Schema, fields
  5. app = Flask(__name__)
  6. class UserSchema(Schema):
  7.     id = fields.Int()
  8.     name = fields.Str()
  9. class UserResource(MethodResource):
  10.     @doc(description='Get a user by ID', tags=['User'])
  11.     @marshal_with(UserSchema)
  12.     def get(self, user_id):
  13.         return {"id": user_id, "name""John Doe"}
  14. app.add_url_rule('/users/<int:user_id>', view_func=UserResource.as_view('user_resource'))
  15. docs = FlaskApiSpec(app)
  16. docs.register(UserResource)
  17. @app.route('/swagger/')
  18. def swagger_ui():
  19.     return jsonify(docs.spec.to_dict())
  20. if __name__ == '__main__':
  21.     app.run()

Integroi Django ja APIspec

1. Asenna Django ja Django-Rest-Framework

pip install django djangorestframework

2. Luo Django-projekteja ja -sovelluksia

  1. django-admin startproject myproject
  2. cd myproject
  3. django-admin startapp myapp

3. Määritä Django-projekti

Lisää rest_framework ja apispec osoitteeseen settings.py:

  1. INSTALLED_APPS = [
  2.     ...
  3.     'rest_framework',
  4.     'myapp',
  5.     'apispec',
  6. ]

4. Määritä Django-näkymät

Osoitteessa myapp/views.py:

  1. from rest_framework.views import APIView
  2. from rest_framework.response import Response
  3. from rest_framework.schemas import AutoSchema
  4. class UserView(APIView):
  5.     schema = AutoSchema(
  6.         manual_fields=[
  7.             coreapi.Field('user_id', required=True, location='path', schema={'type''integer'})
  8.         ]
  9.     )
  10.     def get(self, request, user_id):
  11.         """
  12.         Get a user by ID.
  13.         ---
  14.         responses:
  15.           200:
  16.             description: A user object
  17.             content:
  18.               application/json:
  19.                 schema:
  20.                   type: object
  21.                   properties:
  22.                     id:
  23.                       type: integer
  24.                     name:
  25.                       type: string
  26.         """
  27.         return Response({"id": user_id, "name""John Doe"})

5. Määritä URL-osoite

Osoitteessa myapp/urls.py:

  1. from django.urls import path
  2. from .views import UserView
  3. urlpatterns = [
  4.     path('users/<int:user_id>/', UserView.as_view(), name='user-view'),
  5. ]

6. Luo OpenAPI-määritys

Manager.py:ssä:

  1. from apispec import APISpec
  2. from rest_framework.schemas import get_schema_view
  3. spec = APISpec(
  4.     title="My API",
  5.     version="1.0.0",
  6.     openapi_version="3.0.0",
  7. )
  8. schema_view = get_schema_view(title="My API")
  9. schema = schema_view.get_schema(request=None, public=True)
  10. spec.components.schema('User', schema)
  11. spec.path(path='/users/{user_id}/', operations=schema['paths']['/users/{user_id}/'])
  12. print(spec.to_yaml())

03APIspecin lisäominaisuudet

1. Mukautettu generaattori

APIspec tarjoaa joustavan laajennusmekanismin, jonka avulla voit mukauttaa generaattoreita. Voit toteuttaa oman sukupolvilogiikkasi perimällä ja laajentamalla Apispecin tarjoamaa perusluokkaa.

  1. from apispec import BasePlugin
  2. class MyPlugin(BasePlugin):
  3.     def path_helper(self, operations, *, resource, **kwargs):
  4.         operations.update({
  5.             'get': {
  6.                 'description''Get a user by ID',
  7.                 'parameters': [
  8.                     {'name''user_id''in''path''required'True'schema': {'type''integer'}}
  9.                 ],
  10.                 'responses': {
  11.                     '200': {
  12.                         'description''A user object',
  13.                         'content': {
  14.                             'application/json': {
  15.                                 'schema': {
  16.                                     'type''object',
  17.                                     'properties': {
  18.                                         'id': {'type''integer'},
  19.                                         'name': {'type''string'}
  20.                                     }
  21.                                 }
  22.                             }
  23.                         }
  24.                     }
  25.                 }
  26.             }
  27.         })
  28. spec = APISpec(
  29.     title="My API",
  30.     version="1.0.0",
  31.     openapi_version="3.0.0",
  32.     plugins=[MyPlugin()],
  33. )

2. Tukee useita kehyksiä

Apispec tukee useita suosittuja Python-kehyksiä, kuten Flask, Django, Falcon jne. Voit valita sopivat puitteet ja laajennukset tarpeidesi mukaan ja luoda nopeasti API-asiakirjoja.

3. Luo automaattisesti käyttöliittymäasiakirjoja

Apispec voi luoda automaattisesti käyttöliittymädokumentteja funktion tai luokan dokumentaatiomerkkijonon perusteella, mikä vähentää asiakirjojen manuaalisen kirjoittamisen työmäärää.

  1. def get_user(user_id):
  2.     """
  3.     ---
  4.     get:
  5.       description: Get a user by ID
  6.       parameters:
  7.         - name: user_id
  8.           in: path
  9.           required: true
  10.           schema:
  11.             type: integer
  12.       responses:
  13.         200:
  14.           description: A user object
  15.           content:
  16.             application/json:
  17.               schema:
  18.                 type: object
  19.                 properties:
  20.                   id:
  21.                     type: integer
  22.                   name:
  23.                     type: string
  24.     """
  25.     return {"id": user_id, "name""John Doe"}

4. Integroi kolmannen osapuolen työkaluihin

Apispec voidaan integroida moniin kolmansien osapuolien työkaluihin, kuten Swagger UI, ReDoc jne., intuitiivisen käyttöliittymän asiakirjojen näyttö- ja testaustoimintojen tarjoamiseksi.

  1. from flask import Flask, jsonify
  2. from flask_apispec import FlaskApiSpec
  3. app = Flask(__name__)
  4. @app.route('/users/<int:user_id>', methods=['GET'])
  5. def get_user(user_id):
  6.     """
  7.     ---
  8.     get:
  9.       description: Get a user by ID
  10.       parameters:
  11.         - name: user_id
  12.           in: path
  13.           required: true
  14.           schema:
  15.             type: integer
  16.       responses:
  17.         200:
  18.           description: A user object
  19.           content:
  20.             application/json:
  21.               schema:
  22.                 type: object
  23.                 properties:
  24.                   id:
  25.                     type: integer
  26.                   name:
  27.                     type: string
  28.     """
  29.     return jsonify({"id": user_id, "name""John Doe"})
  30. docs = FlaskApiSpec(app)
  31. docs.register(get_user)
  32. if __name__ == '__main__':
  33.     app.run()

04Käytännön tapauksia

Rakenna täydellinen API-dokumentaatiojärjestelmä

1. Projektin esittely

Oletetaan, että meillä on yksinkertainen käyttäjien hallintajärjestelmä ja meidän on dokumentoitava sen API. Sovellusliittymämme sisältää käyttäjien lisäys-, poisto-, muokkaus- ja kyselytoiminnot sekä joitain perustunnistustoimintoja.

2. Hankkeen rakenne

  1. user_management/
  2. ├── app.py
  3. ├── models.py
  4. ├── views.py
  5. ├── serializers.py
  6. └── requirements.txt

3. Asenna riippuvuudet

Lisää riippuvuudetvaatimukset.txt-tiedostoon:

  1. Flask
  2. Flask-RESTful
  3. Flask-SQLAlchemy
  4. Flask-Migrate
  5. apispec
  6. flask-apispec

Suorita seuraava komento asentaaksesi riippuvuudet:

pip install -r requirements.txt

4. Määrittele malli

Määritä käyttäjämalli mallissa.py:

  1. from flask_sqlalchemy import SQLAlchemy
  2. db = SQLAlchemy()
  3. class User(db.Model):
  4.     id = db.Column(db.Integer, primary_key=True)
  5.     name = db.Column(db.String(80), nullable=False)
  6.     email = db.Column(db.String(120), unique=True, nullable=False)

5. Määrittele näkymät ja sarjoittaminen

Määritä käyttäjien serialisoijat serializers.py:ssä:

  1. from marshmallow import Schema, fields
  2. class UserSchema(Schema):
  3.     id = fields.Int(dump_only=True)
  4.     name = fields.Str(required=True)
  5.     email = fields.Email(required=True)

Määritä näkymät view.py:ssä:

  1. from flask import request
  2. from flask_restful import Resource
  3. from models import User, db
  4. from serializers import UserSchema
  5. class UserResource(Resource):
  6.     def get(self, user_id):
  7.         user = User.query.get_or_404(user_id)
  8.         schema = UserSchema()
  9.         return schema.dump(user)
  10.     def post(self):
  11.         schema = UserSchema()
  12.         user = schema.load(request.json)
  13.         db.session.add(user)
  14.         db.session.commit()
  15.         return schema.dump(user), 201
  16.     def put(self, user_id):
  17.         user = User.query.get_or_404(user_id)
  18.         schema = UserSchema(partial=True)
  19.         updated_user = schema.load(request.json, instance=user)
  20.         db.session.commit()
  21.         return schema.dump(updated_user)
  22.     def delete(self, user_id):
  23.         user = User.query.get_or_404(user_id)
  24.         db.session.delete(user)
  25.         db.session.commit()
  26.         return ''204

6. Määritä pääsovellus

App.py:ssä:

  1. from flask import Flask
  2. from flask_restful import Api
  3. from flask_migrate import Migrate
  4. from models import db
  5. from views import UserResource
  6. from flask_apispec import FlaskApiSpec
  7. from flask_apispec.extension import FlaskApiSpec
  8. app = Flask(__name__)
  9. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
  10. db.init_app(app)
  11. migrate = Migrate(app, db)
  12. api = Api(app)
  13. api.add_resource(UserResource, '/users/<int:user_id>')
  14. docs = FlaskApiSpec(app)
  15. docs.register(UserResource)
  16. if __name__ == '__main__':
  17.     app.run()

7. Suorita sovellus ja tarkastele dokumentaatiota

Käynnistä sovellus suorittamalla seuraava komento:

python app.py

Vieraile osoitteessa http://localhost:5000/swagger/ nähdäksesi luotu API-dokumentaatio.

05Parhaat käytännöt

1. Pidä asiakirjat ja koodi synkronoituna

Varmista, että dokumentaatio on aina synkronoitu koodin kanssa välttääksesi epäjohdonmukaisuudet dokumentaation ja todellisen API:n välillä. Voit käyttää CI/CD-työkaluja dokumenttien automaattiseen luomiseen ja käyttöönottoon.

2. Käytä huomautuksia ja koristeita

Kommentteja ja sisustajia käyttämällä dokumentaatiosta voidaan tehdä tiiviimpää ja luettavampaa. Käytä esimerkiksi Flask-Apispecin @doc-decoratoria dokumentaatiotietojen lisäämiseen näkymätoimintoon.

3. Määritä globaalit parametrit ja vastaukset

Yleisesti käytetyille parametreille ja vastauksille voidaan määrittää yleiset parametrit ja vastausmallit Apispecissä toistuvan koodin vähentämiseksi.

  1. spec.components.parameter("user_id""path", schema={"type""integer"}, required=True)
  2. spec.components.response("User", {
  3.     "description""A user object",
  4.     "content": {
  5.         "application/json": {
  6.             "schema": {
  7.                 "type""object",
  8.                 "properties": {
  9.                     "id": {"type""integer"},
  10.                     "name": {"type""string"}
  11.                 }
  12.             }
  13.         }
  14.     }
  15. })

4. Tarkista ja päivitä dokumentaatio säännöllisesti

Tarkista ja päivitä asiakirjat säännöllisesti tarkkuuden ja täydellisyyden varmistamiseksi. Tämä voidaan saavuttaa perustamalla asiakirjojen tarkistussykli tai ottamalla käyttöön asiakirjojen tarkistusprosessi.

Lisätietoja toiminnoista ja yksityiskohtaisesta käytöstä on virallisessa dokumentaatiossa:

https://apispec.readthedocs.io/en/latest

06yhteenveto

Tämän artikkelin kautta uskon, että sinulla on perusymmärrys ja hallinta Apispecistä. Peruskäytöstä edistyneisiin toimintoihin, käytännön tapauksiin ja parhaisiin käytäntöihin, esittelemme kattavasti, kuinka Apispeciä käytetään API-asiakirjojen luomiseen ja ylläpitoon.

Toivon, että voit soveltaa tätä tietoa todellisiin projekteihin ja lisätä sovellusliittymääsi kirkkautta.