البروتوكولات
الأنظمة الفعلية ليست REST فقط. ينمذج Powerduck ستة بروتوكولات في مدخلات مسار OpenAPI عادية عبر امتداد x-protocol. تعيش عمليات البث وRPC في المواصفة نفسها كـREST، بلا أداة منفصلة ولا تحويل قسري إلى أشكال REST.
تبقى كل عملية غير HTTP مدخل مسار عادياً بطريقة HTTP وresponses."200".description.
graphqlوgrpcوmcpتستخدم post.sseوwebsocketتستخدم عادة get.httpهي القيمة الافتراضية ويُحذَفx-protocol.
SSE
أحداث الخادم المُرسَلة عبر HTTP تستخدم x-protocol: "sse". نوع وسائط البث هو text/event-stream، وتصف حمولة الحدث الفردي بـitemSchema لا schema.
paths:
/events:
get:
x-protocol: sse
responses:
"200":
description: Event stream
content:
text/event-stream:
itemSchema:
type: object
properties:
type:
type: string
data:
type: string
WebSocket
يستخدم WebSocket x-protocol: "websocket" مع كتلة x-websocket. يجب أن يبدأ الرابط بـws:// أو wss://.
paths:
/ws:
get:
x-protocol: websocket
x-websocket:
url: wss://example.com/ws
subprotocols: []
headers: {}
subprotocols وheaders اختياريان.
GraphQL
يستخدم GraphQL post على مسار بصيغة /graphql/query/fieldName مع x-graphql. نقطة النهاية رابط HTTP(S) مطلق والاستعلام إلزامي.
paths:
/graphql/query/product:
post:
x-protocol: graphql
x-graphql:
endpoint: https://example.com/graphql
query: query Product($id: ID!) { product(id: ID!) { id name } }
operationName: Product
variablesSchema:
type: object
variables: {}
operationName وvariablesSchema وvariables اختيارية.
gRPC
يستخدم gRPC post على مسار بصيغة /grpc/pkg.Service/Method مع x-grpc. إذا كان الخادم يدعم الانعكاس، ضع reflection: true؛ وإلا زوّد protoPaths (واختيارياً includeDirs).
paths:
/grpc/products.ProductService/GetProduct:
post:
x-protocol: grpc
x-grpc:
address: host:port
service: products.ProductService
method: GetProduct
kind: unary
reflection: true
kind هي unary أو server_streaming أو client_streaming أو bidi_streaming.
MCP
يستخدم MCP افتراضياً Streamable HTTP، post على مسار بصيغة /mcp/tools/tool-name، مع كتلة x-mcp.
paths:
/mcp/tools/create-product:
post:
x-protocol: mcp
x-mcp:
endpoint: http://127.0.0.1:3000/mcp
transport: streamable-http
method: tools/call
name: create-product
argumentsSchema:
type: object
arguments: {}
يختار method عملية MCP: tools/call وtools/list وresources/read وresources/list وresources/templates/list وprompts/get وprompts/list. يُستخدَم name وuri وargumentsSchema وarguments حسب العملية.
قواعد بنيوية
- كل نوع وسائط في
requestBodyأوresponsesيحتاجschemaأو$ref، باستثناءtext/event-streamمعitemSchema. - كل معامل يحتاج
schema(أوcontent). - عند تعديل عملية، يُحفَظ البروتوكول والضبط المختاران: لا تتحول عمليات RPC أو البث إلى REST صامتاً.
- استخدم أشكال الامتداد الدقيقة أعلاه؛ لا تخترع مفاتيح مثل
externalUrlولا تستخدمwsكاسم بروتوكول.
لماذا يهم
عند نمذجة ستة بروتوكولات في مستند واحد، يُدفَع التصميم والتصحيح والمحاكاة والتوثيق وMCP من المصدر نفسه بغض النظر عن النقل. اطلب من المساعد إضافة واجهة بث أو RPC فيُحفَظ ضبط بروتوكولها بدل تسويته إلى REST.
انظر أيضاً: التصميم مع المساعد、نموذج البيانات.