init swagger.py
هذا الالتزام موجود في:
224
swagger.py
Normal file
224
swagger.py
Normal file
@@ -0,0 +1,224 @@
|
||||
from flask import Flask
|
||||
from flask_swagger_ui import get_swaggerui_blueprint
|
||||
import json
|
||||
|
||||
# Swagger configuration
|
||||
SWAGGER_URL = '/docs'
|
||||
API_URL = '/swagger.json'
|
||||
|
||||
swagger_ui_blueprint = get_swaggerui_blueprint(
|
||||
SWAGGER_URL,
|
||||
API_URL,
|
||||
config={
|
||||
'app_name': "My First Store API"
|
||||
}
|
||||
)
|
||||
|
||||
# Swagger JSON specification
|
||||
swagger_spec = {
|
||||
"openapi": "3.0.0",
|
||||
"info": {
|
||||
"title": "Simple Store API",
|
||||
"description": "My first API project - A simple store management system",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
"servers": [
|
||||
{
|
||||
"url": "http://localhost:5000",
|
||||
"description": "Development server"
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"/": {
|
||||
"get": {
|
||||
"summary": "Home page",
|
||||
"description": "Welcome message",
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Welcome message",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"example": {"message": "Welcome to my first API!"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/products": {
|
||||
"get": {
|
||||
"summary": "Get all products",
|
||||
"description": "Returns a list of all products in the store",
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "List of products",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"example": {
|
||||
"products": [
|
||||
{"id": 1, "name": "Laptop", "price": 5000, "quantity": 10}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"post": {
|
||||
"summary": "Add new product",
|
||||
"description": "Create a new product in the store",
|
||||
"requestBody": {
|
||||
"required": True,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {"type": "string", "example": "Keyboard"},
|
||||
"price": {"type": "number", "example": 300},
|
||||
"quantity": {"type": "integer", "example": 20}
|
||||
},
|
||||
"required": ["name", "price"]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "Product created successfully"
|
||||
},
|
||||
"400": {
|
||||
"description": "Missing required fields"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/products/{product_id}": {
|
||||
"get": {
|
||||
"summary": "Get single product",
|
||||
"description": "Get details of a specific product by ID",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "product_id",
|
||||
"in": "path",
|
||||
"required": True,
|
||||
"schema": {"type": "integer"},
|
||||
"example": 1
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Product details"
|
||||
},
|
||||
"404": {
|
||||
"description": "Product not found"
|
||||
}
|
||||
}
|
||||
},
|
||||
"put": {
|
||||
"summary": "Update product",
|
||||
"description": "Update an existing product",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "product_id",
|
||||
"in": "path",
|
||||
"required": True,
|
||||
"schema": {"type": "integer"}
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"required": True,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {"type": "string"},
|
||||
"price": {"type": "number"},
|
||||
"quantity": {"type": "integer"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Product updated"
|
||||
},
|
||||
"404": {
|
||||
"description": "Product not found"
|
||||
}
|
||||
}
|
||||
},
|
||||
"delete": {
|
||||
"summary": "Delete product",
|
||||
"description": "Remove a product from the store",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "product_id",
|
||||
"in": "path",
|
||||
"required": True,
|
||||
"schema": {"type": "integer"}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Product deleted"
|
||||
},
|
||||
"404": {
|
||||
"description": "Product not found"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/orders": {
|
||||
"get": {
|
||||
"summary": "Get all orders",
|
||||
"description": "Returns a list of all orders",
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "List of orders"
|
||||
}
|
||||
}
|
||||
},
|
||||
"post": {
|
||||
"summary": "Create order",
|
||||
"description": "Place a new order for a product",
|
||||
"requestBody": {
|
||||
"required": True,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"product_id": {"type": "integer", "example": 1},
|
||||
"quantity": {"type": "integer", "example": 2}
|
||||
},
|
||||
"required": ["product_id", "quantity"]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "Order created successfully"
|
||||
},
|
||||
"400": {
|
||||
"description": "Invalid order data or not enough stock"
|
||||
},
|
||||
"404": {
|
||||
"description": "Product not found"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def setup_swagger(app):
|
||||
"""Add Swagger UI to Flask app"""
|
||||
app.register_blueprint(swagger_ui_blueprint, url_prefix=SWAGGER_URL)
|
||||
|
||||
@app.route('/swagger.json')
|
||||
def swagger_json():
|
||||
return swagger_spec
|
المرجع في مشكلة جديدة
حظر مستخدم