2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
सामग्रीसूची
02Apispec इत्यस्य मूलभूतः उपयोगः
सरलं एपिआइ दस्तावेजीकरणं जनयन्तु
2. एपिआइ मार्गाः दृश्यानि च परिभाषयन्तु
3. Apispec मध्ये मार्गं योजयन्तु
1. Flask तथा Flask-Apispec संस्थापयन्तु
1. Django तथा Django-Rest-Framework संस्थापयन्तु
2. Django परियोजनानि अनुप्रयोगाः च रचयन्तु
3. Django परियोजना विन्यस्तं कुर्वन्तु
4. Django दृश्यानि परिभाषयन्तु
03Apispec इत्यस्य उन्नतविशेषताः
2. बहुविधरूपरेखानां समर्थनं कुर्वन्तु
3. स्वयमेव अन्तरफलकदस्तावेजान् जनयन्तु
4. तृतीयपक्षीयसाधनैः सह एकीकरणं कुर्वन्तु
5. दृश्यानि क्रमाङ्कनं च परिभाषयन्तु
6. मुख्यानुप्रयोगं परिभाषयन्तु
7. एप् चालयित्वा दस्तावेजीकरणं पश्यन्तु
उत्पन्नं एपिआइ-दस्तावेजं द्रष्टुं http://localhost:5000/swagger/ इति गच्छन्तु ।
एपिआइस्पेस् इत्यस्य परिचयः
Apispec OpenAPI (Swagger) विनिर्देशान् जनयितुं Python पुस्तकालयः अस्ति । एतत् विकासकान् स्वयमेव एपिआइ-दस्तावेजान् जनयितुं परिपालयितुं च सहायं कर्तुं शक्नोति तथा च सहजं विस्तृतं च अन्तरफलकं विवरणं प्रदातुं शक्नोति । Apispec इत्यस्य माध्यमेन वयं Python फंक्शन् अथवा क्लास् इत्यस्य documentation स्ट्रिंग् इत्येतत् OpenAPI विनिर्देशस्य अनुरूपं दस्तावेजे सहजतया परिवर्तयितुं शक्नुमः, येन दस्तावेजीकरणं मैन्युअल् रूपेण लेखनस्य कष्टं न्यूनीकरोति
सरलं सुलभं च: Apispec सरलं सुलभं च API प्रदाति येन भवान् शीघ्रं आरभुं शक्नोति।
लचीला तथा शक्तिशाली: बहुविधरूपरेखां (यथा Flask, Django) विस्तारं च समर्थयति, यत् आवश्यकतानुसारं दस्तावेजजननं अनुकूलितुं शक्नोति ।
स्वचालनम्: स्वयमेव दस्तावेजान् जनयित्वा अद्यतनं कृत्वा हस्तचलितसञ्चालनस्य अनुरक्षणस्य च व्ययस्य न्यूनीकरणं कुर्वन्तु।
Apispec इत्यस्य उपयोगं आरभ्यतुं पूर्वं प्रथमं तत् संस्थापयितुं आवश्यकम् । भवान् pip इत्यस्य उपयोगेन संस्थापयितुं शक्नोति:
pip install apispec
Github परियोजना पता:
https://github.com/marshmallow-code/apispec
कतिपयानां सरलानाम् उदाहरणानां माध्यमेन Apispec इत्यस्य मूलभूतं उपयोगं पश्यामः ।
- from apispec import APISpec
-
- spec = APISpec(
- title="My API",
- version="1.0.0",
- openapi_version="3.0.0",
- info=dict(description="This is a sample API"),
- )
- def get_user(user_id):
- """
- ---
- get:
- description: Get a user by ID
- parameters:
- - name: user_id
- in: path
- required: true
- schema:
- type: integer
- responses:
- 200:
- description: A user object
- content:
- application/json:
- schema:
- type: object
- properties:
- id:
- type: integer
- name:
- type: string
- """
- return {"id": user_id, "name": "John Doe"}
- spec.path(
- path="/users/{user_id}",
- operations=dict(
- get=dict(
- description="Get a user by ID",
- parameters=[
- {
- "name": "user_id",
- "in": "path",
- "required": True,
- "schema": {"type": "integer"},
- }
- ],
- responses={
- "200": {
- "description": "A user object",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "properties": {
- "id": {"type": "integer"},
- "name": {"type": "string"},
- },
- }
- }
- },
- }
- },
- )
- ),
- )
pip install Flask Flask-Apispec
- from flask import Flask, jsonify
- from flask_apispec import FlaskApiSpec, doc, marshal_with
- from flask_apispec.views import MethodResource
- from marshmallow import Schema, fields
-
- app = Flask(__name__)
-
- class UserSchema(Schema):
- id = fields.Int()
- name = fields.Str()
-
- class UserResource(MethodResource):
- @doc(description='Get a user by ID', tags=['User'])
- @marshal_with(UserSchema)
- def get(self, user_id):
- return {"id": user_id, "name": "John Doe"}
-
- app.add_url_rule('/users/<int:user_id>', view_func=UserResource.as_view('user_resource'))
- docs = FlaskApiSpec(app)
- docs.register(UserResource)
-
- @app.route('/swagger/')
- def swagger_ui():
- return jsonify(docs.spec.to_dict())
-
- if __name__ == '__main__':
- app.run()
pip install django djangorestframework
- django-admin startproject myproject
- cd myproject
- django-admin startapp myapp
settings.py मध्ये rest_framework तथा apispec योजयन्तु:
- INSTALLED_APPS = [
- ...
- 'rest_framework',
- 'myapp',
- 'apispec',
- ]
myapp/views.py इत्यत्र:
- from rest_framework.views import APIView
- from rest_framework.response import Response
- from rest_framework.schemas import AutoSchema
-
- class UserView(APIView):
- schema = AutoSchema(
- manual_fields=[
- coreapi.Field('user_id', required=True, location='path', schema={'type': 'integer'})
- ]
- )
-
- def get(self, request, user_id):
- """
- Get a user by ID.
- ---
- responses:
- 200:
- description: A user object
- content:
- application/json:
- schema:
- type: object
- properties:
- id:
- type: integer
- name:
- type: string
- """
- return Response({"id": user_id, "name": "John Doe"})
myapp/urls.py इत्यत्र:
- from django.urls import path
- from .views import UserView
-
- urlpatterns = [
- path('users/<int:user_id>/', UserView.as_view(), name='user-view'),
- ]
manage.py इत्यत्र :
- from apispec import APISpec
- from rest_framework.schemas import get_schema_view
-
- spec = APISpec(
- title="My API",
- version="1.0.0",
- openapi_version="3.0.0",
- )
-
- schema_view = get_schema_view(title="My API")
- schema = schema_view.get_schema(request=None, public=True)
- spec.components.schema('User', schema)
- spec.path(path='/users/{user_id}/', operations=schema['paths']['/users/{user_id}/'])
-
- print(spec.to_yaml())
APIspec एकं लचीलं विस्तारतन्त्रं प्रदाति यत् भवन्तं जनरेटर् अनुकूलितुं शक्नोति । Apispec द्वारा प्रदत्तं आधारवर्गं उत्तराधिकारं प्राप्य विस्तारं कृत्वा भवान् स्वस्य जननतर्कं कार्यान्वितुं शक्नोति ।
- from apispec import BasePlugin
-
- class MyPlugin(BasePlugin):
- def path_helper(self, operations, *, resource, **kwargs):
- operations.update({
- 'get': {
- 'description': 'Get a user by ID',
- 'parameters': [
- {'name': 'user_id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}}
- ],
- 'responses': {
- '200': {
- 'description': 'A user object',
- 'content': {
- 'application/json': {
- 'schema': {
- 'type': 'object',
- 'properties': {
- 'id': {'type': 'integer'},
- 'name': {'type': 'string'}
- }
- }
- }
- }
- }
- }
- }
- })
-
- spec = APISpec(
- title="My API",
- version="1.0.0",
- openapi_version="3.0.0",
- plugins=[MyPlugin()],
- )
एपिस्पेक् विविधं लोकप्रियं पायथन्-रूपरेखां समर्थयति, यथा Flask, Django, Falcon इत्यादीनि । शीघ्रं एपिआइ दस्तावेजान् जनयितुं भवान् स्वस्य आवश्यकतानुसारं समुचितं ढाञ्चं प्लग-इन् च चिन्वितुं शक्नोति ।
एपिस्पेक् स्वयमेव कस्यचित् फंक्शन् अथवा क्लास् इत्यस्य दस्तावेजीकरणस्ट्रिंग् इत्यस्य आधारेण अन्तरफलकदस्तावेजान् जनयितुं शक्नोति, येन दस्तावेजान् मैन्युअल् रूपेण लेखनस्य कार्यभारः न्यूनीकरोति ।
- def get_user(user_id):
- """
- ---
- get:
- description: Get a user by ID
- parameters:
- - name: user_id
- in: path
- required: true
- schema:
- type: integer
- responses:
- 200:
- description: A user object
- content:
- application/json:
- schema:
- type: object
- properties:
- id:
- type: integer
- name:
- type: string
- """
- return {"id": user_id, "name": "John Doe"}
Apispec इत्येतत् अनेकैः तृतीयपक्षीयसाधनैः सह एकीकृत्य, यथा Swagger UI, ReDoc इत्यादिभिः सह, सहजज्ञानयुक्तं अन्तरफलकदस्तावेजप्रदर्शनं परीक्षणकार्यं च प्रदातुं शक्यते ।
- from flask import Flask, jsonify
- from flask_apispec import FlaskApiSpec
-
- app = Flask(__name__)
-
- @app.route('/users/<int:user_id>', methods=['GET'])
- def get_user(user_id):
- """
- ---
- get:
- description: Get a user by ID
- parameters:
- - name: user_id
- in: path
- required: true
- schema:
- type: integer
- responses:
- 200:
- description: A user object
- content:
- application/json:
- schema:
- type: object
- properties:
- id:
- type: integer
- name:
- type: string
- """
- return jsonify({"id": user_id, "name": "John Doe"})
-
- docs = FlaskApiSpec(app)
- docs.register(get_user)
-
- if __name__ == '__main__':
- app.run()
एकं सम्पूर्णं एपिआइ दस्तावेजीकरणप्रणालीं निर्मायताम्
मानातु अस्माकं सरलं उपयोक्तृप्रबन्धनप्रणाली अस्ति तस्य एपिआइ दस्तावेजीकरणस्य आवश्यकता अस्ति । अस्माकं एपिआइ मध्ये उपयोक्तृसंयोजनं, विलोपनं, परिवर्तनं, प्रश्नक्रियाः, तथैव केचन मूलभूतपरिचयप्रमाणीकरणकार्यं च समाविष्टम् अस्ति ।
- user_management/
- ├── app.py
- ├── models.py
- ├── views.py
- ├── serializers.py
- └── requirements.txt
requirements.txt इत्यत्र आश्रयाणि योजयन्तु:
- Flask
- Flask-RESTful
- Flask-SQLAlchemy
- Flask-Migrate
- apispec
- flask-apispec
निर्भरतां संस्थापयितुं निम्नलिखितम् आदेशं चालयन्तु ।
pip install -r requirements.txt
models.py इत्यस्मिन् उपयोक्तृप्रतिरूपं परिभाषयन्तु:
- from flask_sqlalchemy import SQLAlchemy
-
- db = SQLAlchemy()
-
- class User(db.Model):
- id = db.Column(db.Integer, primary_key=True)
- name = db.Column(db.String(80), nullable=False)
- email = db.Column(db.String(120), unique=True, nullable=False)
serializers.py इत्यस्मिन् उपयोक्तृक्रमाङ्ककाः परिभाषयन्तु:
- from marshmallow import Schema, fields
-
- class UserSchema(Schema):
- id = fields.Int(dump_only=True)
- name = fields.Str(required=True)
- email = fields.Email(required=True)
-
views.py इत्यत्र दृश्यानि परिभाषयन्तु:
- from flask import request
- from flask_restful import Resource
- from models import User, db
- from serializers import UserSchema
-
- class UserResource(Resource):
- def get(self, user_id):
- user = User.query.get_or_404(user_id)
- schema = UserSchema()
- return schema.dump(user)
-
- def post(self):
- schema = UserSchema()
- user = schema.load(request.json)
- db.session.add(user)
- db.session.commit()
- return schema.dump(user), 201
-
- def put(self, user_id):
- user = User.query.get_or_404(user_id)
- schema = UserSchema(partial=True)
- updated_user = schema.load(request.json, instance=user)
- db.session.commit()
- return schema.dump(updated_user)
-
- def delete(self, user_id):
- user = User.query.get_or_404(user_id)
- db.session.delete(user)
- db.session.commit()
- return '', 204
app.py इत्यत्र : १.
- from flask import Flask
- from flask_restful import Api
- from flask_migrate import Migrate
- from models import db
- from views import UserResource
- from flask_apispec import FlaskApiSpec
- from flask_apispec.extension import FlaskApiSpec
-
- app = Flask(__name__)
- app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
- db.init_app(app)
- migrate = Migrate(app, db)
- api = Api(app)
-
- api.add_resource(UserResource, '/users/<int:user_id>')
-
- docs = FlaskApiSpec(app)
- docs.register(UserResource)
-
- if __name__ == '__main__':
- app.run()
निम्नलिखित आदेशं चालयित्वा अनुप्रयोगं आरभत:
python app.py
1. दस्तावेजीकरणं कोडं च समन्वयेन स्थापयन्तु
दस्तावेजीकरणस्य वास्तविक-एपिआइ-इत्यस्य च मध्ये असङ्गतिं परिहरितुं दस्तावेजीकरणं सदैव कोडेन सह समन्वयं भवति इति सुनिश्चितं कुर्वन्तु । स्वयमेव दस्तावेजीकरणं जनयितुं परिनियोजितुं च भवान् CI/CD उपकरणानां उपयोगं कर्तुं शक्नोति ।
2. एनोटेशन्स् तथा अलङ्कारस्य उपयोगं कुर्वन्तु
टिप्पणीनां, अलङ्कारस्य च उपयोगेन दस्तावेजीकरणं अधिकं संक्षिप्तं पठनीयं च कर्तुं शक्यते । उदाहरणार्थं, दृश्यकार्यं प्रति दस्तावेजीकरणसूचनाः योजयितुं Flask-Apispec इत्यस्य @doc decorator इत्यस्य उपयोगं कुर्वन्तु ।
3. वैश्विकमापदण्डान् प्रतिक्रियाश्च परिभाषयन्तु
सामान्यतया प्रयुक्तानां मापदण्डानां प्रतिक्रियाणां च कृते, पुनरावृत्तिसङ्केतस्य न्यूनीकरणाय Apispec इत्यस्मिन् वैश्विकमापदण्डाः प्रतिक्रियासारूप्याणि च परिभाषितुं शक्यन्ते ।
- spec.components.parameter("user_id", "path", schema={"type": "integer"}, required=True)
- spec.components.response("User", {
- "description": "A user object",
- "content": {
- "application/json": {
- "schema": {
- "type": "object",
- "properties": {
- "id": {"type": "integer"},
- "name": {"type": "string"}
- }
- }
- }
- }
- })
4. नियमितरूपेण दस्तावेजानां समीक्षां कृत्वा अद्यतनं कुर्वन्तु
सटीकताम् पूर्णतां च सुनिश्चित्य दस्तावेजानां नियमितरूपेण समीक्षां कृत्वा अद्यतनं कुर्वन्तु। एतत् दस्तावेजसमीक्षाचक्रं स्थापयित्वा अथवा दस्तावेजसमीक्षाप्रक्रियायाः परिचयं कृत्वा प्राप्तुं शक्यते ।
अधिककार्यं विस्तृतप्रयोगाय च आधिकारिकदस्तावेजं पश्यन्तु:
https://apispec.readthedocs.io/en/latest
अस्य लेखस्य माध्यमेन मम विश्वासः अस्ति यत् भवतः एपिस्पेक् विषये मूलभूतं अवगमनं निपुणता च अस्ति। मूलभूतप्रयोगात् उन्नतकार्यपर्यन्तं, व्यावहारिकप्रकरणानाम् उत्तमप्रथानां च यावत्, वयं एपिआइ दस्तावेजान् जनयितुं परिपालयितुं च Apispec इत्यस्य उपयोगः कथं करणीयः इति व्यापकरूपेण परिचययामः।
आशासे यत् भवान् एतत् ज्ञानं वास्तविकप्रकल्पेषु प्रयोक्तुं शक्नोति तथा च स्वस्य एपिआइ मध्ये प्रकाशस्य स्पर्शं योजयितुं शक्नोति।