<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Yusuf Khalidd</title>
    <description>The latest articles on Forem by Yusuf Khalidd (@yusuf_khalidd).</description>
    <link>https://forem.com/yusuf_khalidd</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3821724%2F0310c456-f78f-4e57-a40e-62fa6c7bebaa.png</url>
      <title>Forem: Yusuf Khalidd</title>
      <link>https://forem.com/yusuf_khalidd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/yusuf_khalidd"/>
    <language>en</language>
    <item>
      <title>كلود للوكلاء المدارة ضد حزمة تطوير الوكيل (2026): أيهما تختار؟</title>
      <dc:creator>Yusuf Khalidd</dc:creator>
      <pubDate>Tue, 19 May 2026 10:28:58 +0000</pubDate>
      <link>https://forem.com/yusuf_khalidd/klwd-llwkl-lmdr-dd-hzm-ttwyr-lwkyl-2026-yhm-tkhtr-3j97</link>
      <guid>https://forem.com/yusuf_khalidd/klwd-llwkl-lmdr-dd-hzm-ttwyr-lwkyl-2026-yhm-tkhtr-3j97</guid>
      <description>&lt;p&gt;لقد قررت إطلاق وكيل ذكاء اصطناعي إنتاجي على Claude. القرار المعماري الأول ليس اختيار النموذج فقط، بل اختيار مكان تشغيل حلقة الوكيل: هل تستخدم وكلاء Claude المُدارين (Claude Managed Agents) لتدير Anthropic الحلقة وبيئة الاختبار وحالة الجلسة، أم تستخدم حزمة تطوير وكيل Claude (Claude Agent SDK) لتشغيل الحلقة داخل خدمتك وبنيتك التحتية؟ هذا الدليل يحوّل المقارنة إلى خطوات قرار عملية باستخدام أمثلة مثل وكيل استرداد مدفوعات ووكيل فرز تذاكر دعم.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;جرّب Apidog اليوم&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  خلاصة القرار
&lt;/h2&gt;

&lt;p&gt;اختر &lt;strong&gt;وكلاء Claude المُدارين&lt;/strong&gt; عندما تريد تقليل عبء التشغيل: Anthropic تستضيف حلقة الوكيل، بيئة الاختبار، وسجل الجلسة، وهذا مناسب للأعمال الطويلة أو غير المتزامنة.&lt;/p&gt;

&lt;p&gt;اختر &lt;strong&gt;حزمة تطوير وكيل Claude&lt;/strong&gt; عندما تحتاج إلى تشغيل الحلقة داخل بيئتك: تحكم كامل في الأدوات، الأذونات، الخطافات، محلية البيانات، والتكلفة التشغيلية.&lt;/p&gt;

&lt;p&gt;كلا الخيارين يدعمان نماذج Claude وMCP، لكنهما يختلفان جذريًا في الملكية التشغيلية.&lt;/p&gt;

&lt;h2&gt;
  
  
  قبل الاختيار: حدّد أين ستفشل المنظومة
&lt;/h2&gt;

&lt;p&gt;معظم وكلاء الإنتاج لا “يفكرون” فقط؛ هم يستدعون APIs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;إصدار استرداد مدفوعات.&lt;/li&gt;
&lt;li&gt;إنشاء تذكرة Zendesk.&lt;/li&gt;
&lt;li&gt;قراءة مخزون.&lt;/li&gt;
&lt;li&gt;استدعاء خدمة تسعير داخلية.&lt;/li&gt;
&lt;li&gt;تشغيل أداة عبر MCP.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;لذلك لا تختبر الوكيل وحده. اختبر كل API وأداة MCP يستدعيها. يمكنك استخدام &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; لمحاكاة التبعيات، تشغيل اختبارات العقود، وتصحيح طلبات الوكيل قبل وصوله إلى بيئة الإنتاج.&lt;/p&gt;

&lt;p&gt;للمقدمة الخاصة بالخيار المستضاف، راجع &lt;a href="http://apidog.com/blog/claude-managed-agents-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل وكلاء Claude المُدارين&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ما هو وكلاء Claude المُدارون؟
&lt;/h2&gt;

&lt;p&gt;وكلاء Claude المُدارون هو وقت تشغيل مستضاف للوكيل. بدل أن تبني حلقة الوكيل، بيئة الاختبار، وتنفيذ الجلسات بنفسك، تصف الوكيل وترسل له الأحداث عبر API.&lt;/p&gt;

&lt;p&gt;تم إطلاقه في نسخة تجريبية عامة في أبريل 2026 ويتطلب حاليًا الرأس التجريبي:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;anthropic-beta: managed-agents-2026-04-01
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;تدور البنية حول أربعة مفاهيم:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent&lt;/strong&gt;: النموذج، موجه النظام، الأدوات، خوادم MCP، والمهارات.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment&lt;/strong&gt;: قالب حاوية يحتوي على حزم مثبتة مسبقًا وقواعد شبكة.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session&lt;/strong&gt;: تشغيل فعلي لوكيل داخل بيئة لتنفيذ مهمة واحدة.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Events&lt;/strong&gt;: الرسائل، نتائج الأدوات، وتحديثات الحالة المتدفقة بين تطبيقك والوكيل عبر SSE.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;التدفق العملي يكون كالتالي:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;أنشئ Agent.&lt;/li&gt;
&lt;li&gt;اربطه ببيئة Environment.&lt;/li&gt;
&lt;li&gt;ابدأ Session.&lt;/li&gt;
&lt;li&gt;أرسل رسالة المستخدم كحدث.&lt;/li&gt;
&lt;li&gt;استقبل النتائج والأحداث المتدفقة.&lt;/li&gt;
&lt;li&gt;استعد سجل الأحداث عند التصحيح أو التدقيق.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;يدعم الخيار أدوات مدمجة مثل Bash، عمليات الملفات، البحث عبر الويب، والاسترجاع، إضافة إلى خوادم MCP. وهو مناسب عندما تحتاج إلى:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;تنفيذ طويل من دقائق إلى ساعات.&lt;/li&gt;
&lt;li&gt;جلسات ذات حالة دائمة.&lt;/li&gt;
&lt;li&gt;تشغيل غير متزامن.&lt;/li&gt;
&lt;li&gt;تقليل عبء البنية التحتية.&lt;/li&gt;
&lt;li&gt;سجل أحداث مستضاف.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;لكن انتبه إلى نقطتين:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;الأدوات المخصصة لا تُنفَّذ داخل Anthropic تلقائيًا&lt;/strong&gt;. Claude يطلب استدعاء الأداة، وتطبيقك ينفذها ويرجع النتيجة عبر تدفق الأحداث.&lt;/li&gt;
&lt;li&gt;بعض الميزات مثل النتائج والوكلاء المتعددين قد تكون مقيدة بطلب وصول منفصل كمعاينة بحثية.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;لخلفية أوسع عن حلقة الوكيل والأدوات والذاكرة، راجع &lt;a href="http://apidog.com/blog/agentic-ai-architecture?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;بنية الذكاء الاصطناعي القائم على الوكلاء&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ما هي حزمة تطوير وكيل Claude؟
&lt;/h2&gt;

&lt;p&gt;حزمة تطوير وكيل Claude هي مكتبة بايثون أو تايب سكريبت تشغّل حلقة الوكيل داخل عمليتك. كانت تُعرف سابقًا باسم Claude Code SDK، ثم أُعيدت تسميتها لتعكس استخدامات أوسع من مهام البرمجة.&lt;/p&gt;

&lt;p&gt;التثبيت:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;claude-agent-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;أو:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @anthropic-ai/claude-agent-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;الفكرة الأساسية: بدل أن تكتب حلقة أدوات يدويًا مثل:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stop_reason&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool_use&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# نفّذ الأداة
&lt;/span&gt;    &lt;span class="c1"&gt;# أرسل النتيجة
&lt;/span&gt;    &lt;span class="c1"&gt;# أكمل الحلقة
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;تستخدم SDK التي توفر الحلقة، إدارة السياق، الأدوات، الجلسات، والخطافات.&lt;/p&gt;

&lt;p&gt;مثال مبسط بالفكرة العامة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;claude_agent_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ClaudeAgentOptions&lt;/span&gt;

&lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgentOptions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;allowed_tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Read&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Edit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;افحص المشروع واقترح إصلاحًا للاختبارات الفاشلة&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;توفر SDK آليات مهمة للإنتاج:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;أدوات مدمجة&lt;/strong&gt;: &lt;code&gt;Read&lt;/code&gt;, &lt;code&gt;Write&lt;/code&gt;, &lt;code&gt;Edit&lt;/code&gt;, &lt;code&gt;Bash&lt;/code&gt;, &lt;code&gt;Glob&lt;/code&gt;, &lt;code&gt;Grep&lt;/code&gt;, &lt;code&gt;WebSearch&lt;/code&gt;, &lt;code&gt;WebFetch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks&lt;/strong&gt;: مثل &lt;code&gt;PreToolUse&lt;/code&gt;, &lt;code&gt;PostToolUse&lt;/code&gt;, &lt;code&gt;Stop&lt;/code&gt;, &lt;code&gt;SessionStart&lt;/code&gt;, &lt;code&gt;SessionEnd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subagents&lt;/strong&gt;: وكلاء فرعيون لمهام مركزة.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP&lt;/strong&gt;: ربط قواعد بيانات، متصفحات، وخدمات خارجية.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permissions&lt;/strong&gt;: السماح أو الحظر أو طلب موافقة بشرية.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sessions&lt;/strong&gt;: حفظ واستئناف الجلسات، عادة بصيغة JSONL على نظام ملفاتك.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;مثال عملي على استخدام Hook لمنع أمر خطير:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;pre_tool_use_hook&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rm -rf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;command&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;allow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;الأمر محظور لأنه قد يحذف ملفات حرجة&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;allow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;هذه النقطة مهمة: مع SDK أنت تملك الحلقة. هذا يعني أنك تملك أيضًا مسؤولية التشغيل، السجلات، التوسع، العزل، والحوكمة.&lt;/p&gt;

&lt;p&gt;للبداية العملية، راجع &lt;a href="http://apidog.com/blog/claude-agent-sdk-with-claude-plan-setup-guide?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;إعداد حزمة تطوير وكيل Claude بخطة Claude&lt;/a&gt; و&lt;a href="http://apidog.com/blog/build-your-own-claude-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;بناء Claude Code الخاص بك&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ملاحظة فوترة: بدءًا من 15 يونيو 2026، سيتم سحب استخدام Agent SDK و&lt;code&gt;claude -p&lt;/code&gt; في خطط الاشتراك من رصيد شهري منفصل لـ Agent SDK، مختلف عن حدود الاستخدام التفاعلي. تحقق دائمًا من شروط Anthropic الحالية قبل بناء توقعات التكلفة.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  مقارنة مباشرة
&lt;/h2&gt;

&lt;p&gt;راجع الأسعار والحالة الرسمية من &lt;a href="https://www.anthropic.com/pricing" rel="noopener noreferrer"&gt;صفحة أسعار Anthropic&lt;/a&gt; و&lt;a href="https://platform.claude.com/docs/en/managed-agents/overview" rel="noopener noreferrer"&gt;وثائق الوكلاء المُدارين&lt;/a&gt; قبل اعتماد قرار ميزانية.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;المعيار&lt;/th&gt;
&lt;th&gt;وكلاء Claude المُدارون&lt;/th&gt;
&lt;th&gt;حزمة تطوير وكيل Claude&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;مكان تشغيل الحلقة&lt;/td&gt;
&lt;td&gt;بنية Anthropic التحتية&lt;/td&gt;
&lt;td&gt;عمليتك وبنيتك التحتية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;الواجهة&lt;/td&gt;
&lt;td&gt;REST API + SSE&lt;/td&gt;
&lt;td&gt;مكتبة Python أو TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;التحكم في الحلقة&lt;/td&gt;
&lt;td&gt;تكوين وتوجيه عبر الأحداث&lt;/td&gt;
&lt;td&gt;تحكم كامل داخل العملية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;التكلفة&lt;/td&gt;
&lt;td&gt;رموز Claude + رسوم تشغيل لكل ساعة جلسة نشطة&lt;/td&gt;
&lt;td&gt;رموز Claude + تكلفة البنية التي تشغلها&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;عبء التشغيل&lt;/td&gt;
&lt;td&gt;منخفض&lt;/td&gt;
&lt;td&gt;أعلى&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;قابلية المراقبة&lt;/td&gt;
&lt;td&gt;سجل أحداث مستضاف وقابل للاستعادة&lt;/td&gt;
&lt;td&gt;Hooks وسجلات ومراقبة تبنيها أنت&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;زمن الوصول&lt;/td&gt;
&lt;td&gt;قفزة إلى وقت تشغيل مستضاف&lt;/td&gt;
&lt;td&gt;قرب أعلى من خدماتك الداخلية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;محلية البيانات&lt;/td&gt;
&lt;td&gt;الجلسة والبيئة لدى Anthropic أو AWS حسب الخيار&lt;/td&gt;
&lt;td&gt;الحالة والأدوات داخل بنيتك&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;تنفيذ الأدوات المخصصة&lt;/td&gt;
&lt;td&gt;تطبيقك ينفذ ويرجع النتيجة عبر الأحداث&lt;/td&gt;
&lt;td&gt;دوال داخل العملية&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;أفضل استخدام&lt;/td&gt;
&lt;td&gt;أعمال طويلة وغير متزامنة&lt;/td&gt;
&lt;td&gt;بيانات حساسة، VPC، تحكم دقيق&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  كيف تقرأ المقارنة عمليًا؟
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. التكلفة ليست رقمًا واحدًا
&lt;/h3&gt;

&lt;p&gt;وكلاء Claude المُدارون يضيفون تكلفة تشغيل لكل ساعة جلسة نشطة. إذا كان الوكيل يعمل طويلًا أو ينتظر بين أدوات كثيرة، فهذا يؤثر على التكلفة.&lt;/p&gt;

&lt;p&gt;مع SDK لا توجد رسوم تشغيل مستضافة من Anthropic لكل ساعة، لكنك تدفع مقابل:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;الخوادم.&lt;/li&gt;
&lt;li&gt;العزل.&lt;/li&gt;
&lt;li&gt;التخزين.&lt;/li&gt;
&lt;li&gt;المراقبة.&lt;/li&gt;
&lt;li&gt;التوسع.&lt;/li&gt;
&lt;li&gt;وقت فريق التشغيل.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;لذلك اسأل:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;هل أريد دفع تكلفة تشغيل مُدارة، أم أريد امتلاك البنية وتشغيلها؟&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. محلية البيانات قد تحسم القرار
&lt;/h3&gt;

&lt;p&gt;إذا كان الوكيل يتعامل مع بيانات منظمة، مالية، صحية، أو محصورة داخل VPC، فغالبًا ستحتاج SDK.&lt;/p&gt;

&lt;p&gt;مع SDK:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;تنفيذ الأدوات داخل بنيتك.&lt;/li&gt;
&lt;li&gt;حالة الجلسة على نظامك.&lt;/li&gt;
&lt;li&gt;يمكنك ربط سياسات تدقيق داخلية.&lt;/li&gt;
&lt;li&gt;فقط الاستنتاج يذهب إلى Claude.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;مع الوكلاء المُدارين:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;بيئة الاختبار وسجل الأحداث مستضافان لدى Anthropic أو AWS حسب التوفر والقيود.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. قابلية المراقبة تختلف في مكانها
&lt;/h3&gt;

&lt;p&gt;الوكلاء المُدارون يعطونك سجل أحداث مستضافًا.&lt;/p&gt;

&lt;p&gt;SDK تعطيك Hooks، لكن عليك ربطها بـ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenTelemetry.&lt;/li&gt;
&lt;li&gt;Datadog.&lt;/li&gt;
&lt;li&gt;Grafana.&lt;/li&gt;
&lt;li&gt;سجلات داخلية.&lt;/li&gt;
&lt;li&gt;نظام تدقيق.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;مثال Hook لتسجيل كل استخدام أداة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;post_tool_use_hook&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;audit_log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tool&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;result_status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;session_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;session_id&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  اختبر APIs التي يستدعيها الوكيل
&lt;/h2&gt;

&lt;p&gt;بغض النظر عن نموذج الاستضافة، فشل الوكيل غالبًا لا يأتي من Claude نفسه، بل من API غير مستقرة أو أداة MCP تعيد شكلًا غير متوقع.&lt;/p&gt;

&lt;p&gt;اختبر ثلاث طبقات قبل الإطلاق.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. عقود API
&lt;/h3&gt;

&lt;p&gt;كل أداة يستدعيها الوكيل لها مخطط طلب واستجابة. إذا تغيرت الواجهة الخلفية، قد يفشل الوكيل بصمت أو يبدأ في اتخاذ قرارات خاطئة.&lt;/p&gt;

&lt;p&gt;باستخدام &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;، يمكنك:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;تعريف مخطط endpoint.&lt;/li&gt;
&lt;li&gt;إنشاء mock service.&lt;/li&gt;
&lt;li&gt;تشغيل اختبارات عقود.&lt;/li&gt;
&lt;li&gt;إعادة تشغيل سيناريوهات وكيل حقيقية ضد المحاكاة.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;مثال عقد مبسط لاسترداد مدفوعات:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"endpoint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/refunds"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"POST"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"transaction_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"number"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"response"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"refund_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"approved|pending|rejected"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;إذا بدأت الخدمة الحقيقية بإرجاع &lt;code&gt;state&lt;/code&gt; بدل &lt;code&gt;status&lt;/code&gt;، يجب أن يفشل اختبار العقد قبل أن يفشل وكيلك في الإنتاج.&lt;/p&gt;

&lt;p&gt;راجع &lt;a href="http://apidog.com/blog/how-to-test-ai-agents-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;كيفية اختبار وكلاء الذكاء الاصطناعي الذين يستدعون واجهات برمجة التطبيقات&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. خوادم MCP
&lt;/h3&gt;

&lt;p&gt;كلا الخيارين يدعمان MCP. لكن خادم MCP نفسه قد يفشل بطرق شائعة:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;أداة ترجع JSON غير مطابق.&lt;/li&gt;
&lt;li&gt;مهلة لا تُعالج.&lt;/li&gt;
&lt;li&gt;خطأ يرجع نصًا حرًا بدل كائن منظم.&lt;/li&gt;
&lt;li&gt;اختلاف أسماء الحقول.&lt;/li&gt;
&lt;li&gt;غياب pagination أو rate limits واضحة.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;اختبر كل أداة MCP مباشرة قبل ربطها بوكيل. راجع &lt;a href="http://apidog.com/blog/mcp-server-testing-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;اختبار خادم MCP باستخدام Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. نمط طلبات الوكيل
&lt;/h3&gt;

&lt;p&gt;الوكلاء لا يتصرفون مثل المستخدمين البشر. قد يفعلون الآتي:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;يعيدون المحاولة بسرعة.&lt;/li&gt;
&lt;li&gt;يستدعون نفس endpoint عدة مرات.&lt;/li&gt;
&lt;li&gt;يقرؤون بيانات جزئية.&lt;/li&gt;
&lt;li&gt;يكررون استدعاء أداة بعد خطأ غامض.&lt;/li&gt;
&lt;li&gt;يخلطون بين أخطاء مؤقتة ونجاح جزئي.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;لذلك أعد تشغيل حركة مرور الوكيل ضد mocks. استخدم مصححًا يلتقط الطلبات والاستجابات الفعلية بدل الاعتماد على التوقعات.&lt;/p&gt;

&lt;p&gt;يمكنك &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;تنزيل Apidog&lt;/a&gt; لاختبار هذه التبعيات قبل ربط الوكيل بعميل حقيقي.&lt;/p&gt;

&lt;h2&gt;
  
  
  إطار قرار سريع
&lt;/h2&gt;

&lt;p&gt;ابدأ بهذه الأسئلة. أول “نعم” قوية غالبًا تحدد الخيار.&lt;/p&gt;

&lt;h3&gt;
  
  
  اختر وكلاء Claude المُدارين إذا:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;الوكيل يعمل دقائق أو ساعات.&lt;/li&gt;
&lt;li&gt;العمل غير متزامن.&lt;/li&gt;
&lt;li&gt;لا تريد تشغيل workers أو sandbox أو session store.&lt;/li&gt;
&lt;li&gt;فريقك صغير وعبء العمليات هو القيد الأساسي.&lt;/li&gt;
&lt;li&gt;تحتاج سجل أحداث مستضاف وقابل للاستعادة.&lt;/li&gt;
&lt;li&gt;بياناتك تسمح بوجود الجلسة في بيئة Anthropic أو AWS.&lt;/li&gt;
&lt;li&gt;أنت مرتاح للتعامل مع منتج في مرحلة بيتا وبعض الميزات المقيدة.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  اختر حزمة تطوير وكيل Claude إذا:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;الوكيل يجب أن يعمل داخل VPC.&lt;/li&gt;
&lt;li&gt;يحتاج الوصول إلى قواعد بيانات أو خدمات داخلية.&lt;/li&gt;
&lt;li&gt;لا يمكن تخزين حالة الجلسة لدى طرف ثالث.&lt;/li&gt;
&lt;li&gt;تحتاج Hooks للتدقيق والسياسات.&lt;/li&gt;
&lt;li&gt;تحتاج أذونات دقيقة وموافقات بشرية.&lt;/li&gt;
&lt;li&gt;تريد تنفيذ الأدوات داخل العملية.&lt;/li&gt;
&lt;li&gt;تريد الاستفادة من عقود Bedrock أو Vertex أو Azure القائمة مع إبقاء الحلقة داخليًا.&lt;/li&gt;
&lt;li&gt;تعمل على نموذج أولي محلي سريع.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  مسار شائع
&lt;/h3&gt;

&lt;p&gt;مسار عملي للفرق:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ابدأ بـ Agent SDK محليًا لتسريع التجربة.&lt;/li&gt;
&lt;li&gt;اختبر APIs وMCP بعقود ومحاكاة.&lt;/li&gt;
&lt;li&gt;قيّم عبء التشغيل.&lt;/li&gt;
&lt;li&gt;انقل الإنتاج إلى الوكلاء المُدارين إذا كانت وفورات التشغيل أكبر من خسارة التحكم.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;لكن لا تعامل النقل كتغيير إعدادات فقط. الواجهات مختلفة، تنفيذ الأدوات مختلف، وحالة الجلسة تنتقل من نظام ملفاتك إلى سجل مستضاف.&lt;/p&gt;

&lt;p&gt;إذا كنت تقارن أيضًا بين النماذج أو وكلاء البرمجة، راجع &lt;a href="http://apidog.com/blog/claude-vs-codex-comparison-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;مقارنة Claude و Codex لعام 2026&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  حالات استخدام عملية
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. وكيل استرداد مدفوعات
&lt;/h3&gt;

&lt;p&gt;المهمة:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;قراءة تذكرة دعم.&lt;/li&gt;
&lt;li&gt;البحث عن المعاملة.&lt;/li&gt;
&lt;li&gt;التحقق من سياسة الاسترداد.&lt;/li&gt;
&lt;li&gt;استدعاء API المدفوعات.&lt;/li&gt;
&lt;li&gt;كتابة ملخص إلى التذكرة.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;هذا الوكيل يتعامل مع المال، لذلك تحتاج:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;سجل تدقيق.&lt;/li&gt;
&lt;li&gt;موافقة بشرية للمبالغ الكبيرة.&lt;/li&gt;
&lt;li&gt;اختبارات عقود لواجهات الدفع.&lt;/li&gt;
&lt;li&gt;منع إعادة إصدار استرداد بعد خطأ مؤقت.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;الخيار الأنسب غالبًا: &lt;strong&gt;Agent SDK&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;سبب الاختيار:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;يعمل داخل VPC.&lt;/li&gt;
&lt;li&gt;حالة الجلسة تبقى داخل الشركة.&lt;/li&gt;
&lt;li&gt;يمكن استخدام &lt;code&gt;PreToolUse&lt;/code&gt; لفرض الموافقات.&lt;/li&gt;
&lt;li&gt;يمكن تسجيل كل استدعاء API.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;مثال سياسة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;pre_tool_use_hook&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;issue_refund&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;allow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;requires_human_approval&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;استرداد يتجاوز الحد المسموح آليًا&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;allow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;قبل الإطلاق، يحاكي الفريق نقاط نهاية المدفوعات في Apidog، يشغل اختبارات عقود، ثم يعيد تشغيل تذاكر تاريخية ضد المحاكاة. إذا اكتشف أن الوكيل يعيد طلب الاسترداد بعد &lt;code&gt;504&lt;/code&gt; رغم نجاح العملية في الخلفية، فهذا فشل يجب اكتشافه قبل الإنتاج.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. وكيل فرز تذاكر دعم غير متزامن
&lt;/h3&gt;

&lt;p&gt;المهمة:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;استقبال آلاف التذاكر يوميًا.&lt;/li&gt;
&lt;li&gt;تصنيف كل تذكرة.&lt;/li&gt;
&lt;li&gt;سحب سجلات مرتبطة.&lt;/li&gt;
&lt;li&gt;صياغة رد.&lt;/li&gt;
&lt;li&gt;حل التذكرة أو تصعيدها.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;الخصائص:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;كل مهمة تستغرق عدة دقائق.&lt;/li&gt;
&lt;li&gt;العمل غير متزامن.&lt;/li&gt;
&lt;li&gt;البيانات منخفضة الحساسية.&lt;/li&gt;
&lt;li&gt;الفريق لا يريد تشغيل أسطول workers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;الخيار الأنسب غالبًا: &lt;strong&gt;وكلاء Claude المُدارون&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;سبب الاختيار:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anthropic تدير الجلسات.&lt;/li&gt;
&lt;li&gt;مناسب للأعمال الطويلة.&lt;/li&gt;
&lt;li&gt;سجل الأحداث المستضاف يساعد في تتبع كل تذكرة.&lt;/li&gt;
&lt;li&gt;عبء التشغيل أقل.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;لكن ما زال يجب اختبار:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API السجلات.&lt;/li&gt;
&lt;li&gt;MCP الخاص بنظام التذاكر.&lt;/li&gt;
&lt;li&gt;مخططات الطلبات والاستجابات.&lt;/li&gt;
&lt;li&gt;حالات المهلة وإعادة المحاولة.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. وكيل عمليات بيانات داخلي خلف جدار الحماية
&lt;/h3&gt;

&lt;p&gt;المهمة:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“أعد تشغيل أقسام ETL الفاشلة بالأمس، ثم أرسل تقرير الحالة.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;يتطلب ذلك:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;الوصول إلى API مهام داخلية.&lt;/li&gt;
&lt;li&gt;تشغيل سكريبت إصلاح.&lt;/li&gt;
&lt;li&gt;قراءة سجلات داخلية.&lt;/li&gt;
&lt;li&gt;التعامل مع بيانات حساسة.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;الخيار الأنسب: &lt;strong&gt;Agent SDK&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;سبب الاختيار:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;الخدمات ليست متاحة من الإنترنت العام.&lt;/li&gt;
&lt;li&gt;البيانات لا يجب أن تغادر البيئة.&lt;/li&gt;
&lt;li&gt;يمكن ربط الأدوات عبر MCP داخلي.&lt;/li&gt;
&lt;li&gt;يمكن تسجيل كل أمر في نظام التدقيق الحالي.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;في هذه الحالة، خاصية “يعمل داخل عمليتك” ليست ميزة إضافية؛ إنها شرط معماري.&lt;/p&gt;

&lt;p&gt;للمزيد عن سبب اعتبار الوكلاء مستهلكين أساسيين لـ APIs، راجع &lt;a href="http://apidog.com/blog/ai-agents-new-api-consumers?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;وكلاء الذكاء الاصطناعي كمستهلكين جدد لواجهة برمجة التطبيقات&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  خلاصة تنفيذية
&lt;/h2&gt;

&lt;p&gt;قرار &lt;strong&gt;Claude Managed Agents مقابل Claude Agent SDK&lt;/strong&gt; هو قرار تشغيل وحوكمة بيانات أكثر من كونه اختيار مكتبة.&lt;/p&gt;

&lt;p&gt;تذكّر:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;الوكلاء المُدارون يستضيفون الحلقة وبيئة الاختبار.&lt;/li&gt;
&lt;li&gt;SDK تشغل الحلقة داخل بنيتك.&lt;/li&gt;
&lt;li&gt;الوكلاء المُدارون يقللون عبء التشغيل.&lt;/li&gt;
&lt;li&gt;SDK تعطيك تحكمًا أعلى ومحلية بيانات أقوى.&lt;/li&gt;
&lt;li&gt;التكلفة تعتمد على شكل عبء العمل، لا على سعر الرموز فقط.&lt;/li&gt;
&lt;li&gt;اختبارات API وMCP ضرورية في كلا الخيارين.&lt;/li&gt;
&lt;li&gt;الانتقال من SDK إلى الوكلاء المُدارين ممكن، لكنه مشروع هجرة.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;قبل ربط الوكيل بأي نظام حقيقي، ضع كل API وخادم MCP تحت الاختبار. &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;قم بتنزيل Apidog&lt;/a&gt; لمحاكاة endpoints، تشغيل اختبارات العقود، وتصحيح حركة مرور الوكيل الفعلية.&lt;/p&gt;

&lt;h2&gt;
  
  
  الأسئلة الشائعة
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ما الفرق الجوهري بين وكلاء Claude المُدارين وAgent SDK؟
&lt;/h3&gt;

&lt;p&gt;وكلاء Claude المُدارون هو REST API مستضاف تدير فيه Anthropic حلقة الوكيل وبيئة الاختبار وحالة الجلسة. Agent SDK هي مكتبة Python أو TypeScript تشغل الحلقة داخل عمليتك وبنيتك التحتية.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل Agent SDK هي نفسها Claude Code SDK القديمة؟
&lt;/h3&gt;

&lt;p&gt;نعم. تم تغيير اسم Claude Code SDK إلى Claude Agent SDK ليعكس نطاقًا أوسع من مهام البرمجة. الآلية الأساسية ما زالت حلقة وكيل وأدوات مدمجة وإدارة سياق.&lt;/p&gt;

&lt;h3&gt;
  
  
  أي الخيارين أرخص؟
&lt;/h3&gt;

&lt;p&gt;يعتمد على عبء العمل. الوكلاء المُدارون يضيفون رسوم تشغيل لوقت الجلسة النشط. SDK لا تضيف رسوم تشغيل مستضافة من Anthropic لكل ساعة، لكنك تدفع تكلفة الخوادم والتشغيل والمراقبة. تحقق من الأسعار الرسمية قبل الميزانية.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل يمكن استخدام MCP مع كلا الخيارين؟
&lt;/h3&gt;

&lt;p&gt;نعم. كلاهما يدعم MCP. لذلك يجب اختبار خوادم MCP قبل ربطها بأي وكيل. راجع &lt;a href="http://apidog.com/blog/mcp-server-testing-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;اختبار خادم MCP باستخدام Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  كيف أحافظ على بيانات العملاء خارج بنية Anthropic؟
&lt;/h3&gt;

&lt;p&gt;استخدم Agent SDK وشغّل الحلقة داخل بيئتك. بذلك يبقى تنفيذ الأدوات وحالة الجلسة على بنيتك، بينما يذهب استنتاج النموذج فقط إلى Claude. مع الوكلاء المُدارين، تعيش بيئة الاختبار وسجل الأحداث في بيئة Anthropic أو AWS حسب الخيار.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل وكلاء Claude المُدارون جاهزون للإنتاج؟
&lt;/h3&gt;

&lt;p&gt;تم إطلاقهم في نسخة تجريبية عامة في أبريل 2026 ويتطلبون الرأس التجريبي &lt;code&gt;managed-agents-2026-04-01&lt;/code&gt;. بعض الميزات قد تكون مقيدة بطلب معاينة بحثية. تحقق من الوثائق الرسمية قبل الاعتماد الإنتاجي.&lt;/p&gt;

&lt;h3&gt;
  
  
  كيف أختبر وكيلًا قبل أن يستخدم APIs حقيقية؟
&lt;/h3&gt;

&lt;p&gt;قم بمحاكاة كل API وخادم MCP، واكتب اختبارات عقود، ثم أعد تشغيل حركة مرور واقعية مقابل المحاكاة. يغطي Apidog هذه الخطوات، بما في ذلك تصحيح حركة مرور الوكيل. راجع &lt;a href="http://apidog.com/blog/how-to-test-ai-agents-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;كيفية اختبار وكلاء الذكاء الاصطناعي الذين يستدعون واجهات برمجة التطبيقات&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل يمكن البدء بخيار ثم الانتقال للآخر؟
&lt;/h3&gt;

&lt;p&gt;نعم. المسار الشائع هو النموذج الأولي باستخدام Agent SDK ثم الانتقال إلى الوكلاء المُدارين للإنتاج إذا كان تقليل التشغيل أهم من التحكم. لكنه ليس تغيير إعدادات فقط: الواجهة، تنفيذ الأدوات، وإدارة الجلسات تختلف.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cursor Composer 2.5 ضد Opus 4.7 ضد GPT-5.5: أي نموذج برمجة يجب أن تستخدم؟</title>
      <dc:creator>Yusuf Khalidd</dc:creator>
      <pubDate>Tue, 19 May 2026 02:27:56 +0000</pubDate>
      <link>https://forem.com/yusuf_khalidd/cursor-composer-25-dd-opus-47-dd-gpt-55-y-nmwdhj-brmj-yjb-n-tstkhdm-3ibe</link>
      <guid>https://forem.com/yusuf_khalidd/cursor-composer-25-dd-opus-47-dd-gpt-55-y-nmwdhj-brmj-yjb-n-tstkhdm-3ibe</guid>
      <description>&lt;p&gt;ادعاء Cursor حول Composer 2.5 واضح: جودة برمجة قريبة من النماذج المتقدمة بتكلفة تقارب عُشر السعر. عمليًا، السؤال ليس "من يتصدر لوحة المعايير؟" بل: أي نموذج تختاره كافتراضي عند العمل على قاعدة كود حقيقية وميزانية محدودة؟ في هذا الدليل نقارن Composer 2.5 مع Claude Opus 4.7 و GPT-5.5 من زاوية الأداء، السرعة، التكلفة، وكيف تختبرها على مشروعك.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;جرّب Apidog اليوم&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;إذا كنت تريد خلفية كاملة عن النموذج نفسه، ابدأ بدليلنا حول &lt;a href="http://apidog.com/blog/cursor-composer-2-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Cursor Composer 2.5&lt;/a&gt;. هنا نركز على قرار عملي واحد: عند وجود قاعدة كود حقيقية ومهام يومية، أي نموذج يجب أن تستخدم؟&lt;/p&gt;

&lt;h2&gt;
  
  
  الإجابة المختصرة
&lt;/h2&gt;

&lt;p&gt;Composer 2.5 ليس الأفضل في كل معيار، لكنه يقدم أفضل توازن لمعظم فرق التطوير: قريب جدًا من Opus 4.7 في مهام البرمجة الواقعية، ويتفوق على GPT-5.5 في بعض معايير الكود، مع تكلفة أقل بكثير لكل مهمة. لا يزال Opus 4.7 خيارًا قويًا عندما تريد أعلى سقف تفكير ممكن، بينما يظل GPT-5.5 مميزًا في الأعمال الثقيلة داخل الطرفية.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4hsvtl8zvzvp0mdqaafh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4hsvtl8zvzvp0mdqaafh.png" alt="Cursor Composer 2.5 benchmark comparison" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;استخدم القاعدة التالية كبداية:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;اجعل &lt;strong&gt;Composer 2.5&lt;/strong&gt; النموذج الافتراضي لمهام التطوير اليومية.&lt;/li&gt;
&lt;li&gt;استخدم &lt;strong&gt;Opus 4.7&lt;/strong&gt; للمهام الصعبة جدًا أو الغامضة.&lt;/li&gt;
&lt;li&gt;استخدم &lt;strong&gt;GPT-5.5&lt;/strong&gt; عندما يكون العمل قائمًا على أوامر shell وسلاسل terminal طويلة.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  مقارنة المعايير
&lt;/h2&gt;

&lt;p&gt;يعرض Cursor ثلاث مجموعات رئيسية من الاختبارات. الجدول التالي يضع النماذج جنبًا إلى جنب، مع أرقام Composer 2 القديمة للسياق:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;المعيار&lt;/th&gt;
&lt;th&gt;Composer 2.5&lt;/th&gt;
&lt;th&gt;Opus 4.7&lt;/th&gt;
&lt;th&gt;GPT-5.5&lt;/th&gt;
&lt;th&gt;Composer 2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SWE-bench متعدد اللغات&lt;/td&gt;
&lt;td&gt;79.8%&lt;/td&gt;
&lt;td&gt;80.5%&lt;/td&gt;
&lt;td&gt;77.8%&lt;/td&gt;
&lt;td&gt;73.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-bench 2.0&lt;/td&gt;
&lt;td&gt;69.3%&lt;/td&gt;
&lt;td&gt;69.4%&lt;/td&gt;
&lt;td&gt;82.7%&lt;/td&gt;
&lt;td&gt;غير متوفر&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CursorBench v3.1&lt;/td&gt;
&lt;td&gt;63.2%&lt;/td&gt;
&lt;td&gt;64.8% حد أقصى / 61.6% افتراضي&lt;/td&gt;
&lt;td&gt;59.2% افتراضي&lt;/td&gt;
&lt;td&gt;غير متوفر&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  كيف تقرأ هذه الأرقام؟
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. في SWE-bench متعدد اللغات، الفارق صغير جدًا&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;هذا المعيار يختبر إصلاح مشكلات GitHub حقيقية عبر لغات مختلفة. Composer 2.5 يحقق 79.8%، أي أقل من Opus 4.7 بنقطة تقريبًا، ويتقدم على GPT-5.5. القفزة الأهم هي من Composer 2 عند 73.7% إلى Composer 2.5. إذا كنت تستخدم Composer 2 سابقًا، فهذه ترقية واضحة. يمكنك الرجوع إلى &lt;a href="http://apidog.com/blog/cursor-composer-2?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل Composer 2&lt;/a&gt; لمعرفة نقطة البداية.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. في CursorBench، Composer 2.5 قوي كإعداد افتراضي&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;في مهام Cursor الخاصة، يسجل Composer 2.5 نسبة 63.2%. هذا أعلى من Opus 4.7 في الإعداد الافتراضي 61.6%، وأعلى من GPT-5.5 في الإعداد الافتراضي 59.2%. يتقدم Opus 4.7 فقط عند دفعه إلى أقصى إعداداته، وهذا يعني عادةً تكلفة وزمن استجابة أعلى.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. في Terminal-bench، GPT-5.5 يتفوق بوضوح&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;إذا كانت مهامك تتضمن سلاسل أوامر طويلة، إعداد بيئات، تشغيل سكربتات، أو إدارة حالات معقدة عبر الطرفية، فانتبه إلى رقم GPT-5.5: 82.7% مقابل 69.3% لـ Composer 2.5. هذا ليس فرقًا صغيرًا.&lt;/p&gt;

&lt;p&gt;للتأكيد المستقل لهذه الأرقام، راجع &lt;a href="https://the-decoder.com/cursors-composer-2-5-matches-opus-4-7-and-gpt-5-5-benchmarks-at-a-fraction-of-the-cost/" rel="noopener noreferrer"&gt;تغطية The Decoder&lt;/a&gt; و&lt;a href="https://cursor.com/blog/composer-2-5" rel="noopener noreferrer"&gt;الإعلان الرسمي لـ Cursor Composer 2.5&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  التكلفة: هنا يظهر الفرق الحقيقي
&lt;/h2&gt;

&lt;p&gt;عندما يكون الفارق في الأداء نقطة أو نقطتين، تصبح التكلفة لكل مهمة هي العامل الحاسم.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;النموذج&lt;/th&gt;
&lt;th&gt;الإدخال / مليون رمز&lt;/th&gt;
&lt;th&gt;الإخراج / مليون رمز&lt;/th&gt;
&lt;th&gt;التكلفة التقريبية لكل مهمة&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Composer 2.5 قياسي&lt;/td&gt;
&lt;td&gt;0.50 دولار&lt;/td&gt;
&lt;td&gt;2.50 دولار&lt;/td&gt;
&lt;td&gt;أقل من 1 دولار&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Composer 2.5 سريع&lt;/td&gt;
&lt;td&gt;3.00 دولارات&lt;/td&gt;
&lt;td&gt;15.00 دولارًا&lt;/td&gt;
&lt;td&gt;أرقام فردية منخفضة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opus 4.7 / GPT-5.5&lt;/td&gt;
&lt;td&gt;مستوى متقدم&lt;/td&gt;
&lt;td&gt;مستوى متقدم&lt;/td&gt;
&lt;td&gt;عدة دولارات، وقد تصل إلى 11 دولارًا تقريبًا&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;يفيد Cursor بأن Composer 2.5 يحقق حوالي 63% على CursorBench بتكلفة متوسطة أقل من دولار واحد لكل مهمة. في المقابل، قد تكلف النماذج المتقدمة عدة دولارات لكل مهمة للحصول على نتائج مشابهة أو أفضل قليلًا.&lt;/p&gt;

&lt;p&gt;مثال عملي:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;عدد مهام الوكيل شهريًا&lt;/th&gt;
&lt;th&gt;تكلفة 1 دولار / مهمة&lt;/th&gt;
&lt;th&gt;تكلفة 5 دولارات / مهمة&lt;/th&gt;
&lt;th&gt;تكلفة 11 دولارًا / مهمة&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;500 دولار&lt;/td&gt;
&lt;td&gt;2,500 دولار&lt;/td&gt;
&lt;td&gt;5,500 دولار&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2,000&lt;/td&gt;
&lt;td&gt;2,000 دولار&lt;/td&gt;
&lt;td&gt;10,000 دولار&lt;/td&gt;
&lt;td&gt;22,000 دولار&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10,000&lt;/td&gt;
&lt;td&gt;10,000 دولار&lt;/td&gt;
&lt;td&gt;50,000 دولار&lt;/td&gt;
&lt;td&gt;110,000 دولار&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;إذا كنت تدير 2,000 مهمة وكيل شهريًا، فالفارق بين Composer 2.5 ونموذج متقدم قد يكون آلاف الدولارات شهريًا. لذلك، اختيار النموذج الافتراضي أهم من مطاردة أعلى رقم في معيار واحد.&lt;/p&gt;

&lt;p&gt;لتحليل أعمق لطريقة حساب التكلفة، راجع &lt;a href="http://apidog.com/blog/cursor-composer-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل تسعير Cursor Composer&lt;/a&gt;. وللمقارنة مع النماذج المتقدمة، اقرأ منشور &lt;a href="http://apidog.com/blog/gpt-5-5-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;GPT-5.5 pricing post&lt;/a&gt; ودليل &lt;a href="http://apidog.com/blog/claude-opus-4-7?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Claude Opus 4.7&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  السرعة وسلوك كل نموذج أثناء التطوير
&lt;/h2&gt;

&lt;p&gt;الأداء والتكلفة لا يكفيان. عند استخدام النموذج يوميًا داخل IDE، يهمك أيضًا كيف يتصرف أثناء تنفيذ مهمة متعددة الخطوات.&lt;/p&gt;

&lt;h3&gt;
  
  
  Composer 2.5
&lt;/h3&gt;

&lt;p&gt;استخدمه عندما تريد:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;تعديل عدة ملفات داخل Cursor.&lt;/li&gt;
&lt;li&gt;تنفيذ مهمة agentic طويلة نسبيًا.&lt;/li&gt;
&lt;li&gt;الحفاظ على سياق المشروع عبر خطوات متتابعة.&lt;/li&gt;
&lt;li&gt;توازن بين جودة جيدة وتكلفة منخفضة.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Composer 2.5 مبني على نقطة تفتيش Moonshot Kimi K2.5 مفتوحة المصدر، وتم تدريبه وتخصيصه بواسطة Cursor لسير عمل الوكيل داخل المحرر. لذلك يظهر قوته في حلقة: قراءة الكود، اقتراح تعديل، تطبيقه، ثم الاستمرار بناءً على النتائج.&lt;/p&gt;

&lt;h3&gt;
  
  
  Opus 4.7
&lt;/h3&gt;

&lt;p&gt;استخدمه عندما تكون المهمة:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;غامضة أو تحتاج تفكيرًا معماريًا عميقًا.&lt;/li&gt;
&lt;li&gt;عالية المخاطر.&lt;/li&gt;
&lt;li&gt;تتطلب تحليلًا طويلًا قبل كتابة الكود.&lt;/li&gt;
&lt;li&gt;لا تكون التكلفة فيها العامل الأهم.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Opus 4.7 يتفوق عندما تحتاج أعلى سقف تفكير، لكنك تدفع مقابل ذلك في السعر وزمن الاستجابة.&lt;/p&gt;

&lt;h3&gt;
  
  
  GPT-5.5
&lt;/h3&gt;

&lt;p&gt;استخدمه عندما تكون المهمة:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;مبنية حول terminal.&lt;/li&gt;
&lt;li&gt;تتطلب سلاسل أوامر طويلة.&lt;/li&gt;
&lt;li&gt;تشمل إعداد بيئة، تشغيل اختبارات، تحليل مخرجات shell، أو إصلاح أخطاء build.&lt;/li&gt;
&lt;li&gt;تحتاج نموذجًا عامًا قويًا إلى جانب قدرته البرمجية.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;رقم Terminal-bench يوضح لماذا قد يكون GPT-5.5 الخيار الأفضل لهذا النوع من العمل.&lt;/p&gt;

&lt;h2&gt;
  
  
  كيف تختار النموذج المناسب؟
&lt;/h2&gt;

&lt;p&gt;لا تتعامل مع النماذج الثلاثة كبدائل مطلقة. تعامل معها كأدوات مختلفة.&lt;/p&gt;

&lt;h3&gt;
  
  
  اختر Composer 2.5 إذا:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;تكتب كودًا يوميًا داخل Cursor.&lt;/li&gt;
&lt;li&gt;لديك عدد كبير من مهام الوكيل.&lt;/li&gt;
&lt;li&gt;التكلفة لكل مهمة تؤثر على ميزانية الفريق.&lt;/li&gt;
&lt;li&gt;تحتاج جودة قريبة من النماذج المتقدمة بسعر أقل.&lt;/li&gt;
&lt;li&gt;معظم مهامك هي إصلاحات، ميزات صغيرة، refactors، واختبارات.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  اختر Opus 4.7 إذا:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;المهمة معقدة جدًا أو غير محددة جيدًا.&lt;/li&gt;
&lt;li&gt;تريد أقصى جودة تفكير بغض النظر عن السعر.&lt;/li&gt;
&lt;li&gt;تستخدم بالفعل سير عمل متمركزًا حول Claude. تغطي &lt;a href="http://apidog.com/blog/claude-code-vs-cursor-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;مقارنة Claude Code vs Cursor&lt;/a&gt; هذا المسار.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  اختر GPT-5.5 إذا:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;تعتمد كثيرًا على terminal automation.&lt;/li&gt;
&lt;li&gt;تريد نموذجًا عامًا تستخدمه أيضًا للبرمجة.&lt;/li&gt;
&lt;li&gt;مهامك تتضمن أوامر shell طويلة، إعداد أنظمة، أو تتبع مخرجات تنفيذ معقدة.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  الاستراتيجية العملية: نظام هجين
&lt;/h3&gt;

&lt;p&gt;كثير من الفرق ستحصل على أفضل نتيجة بهذا النمط:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;المهمة اليومية المعتادة        -&amp;gt; Composer 2.5
مشكلة صعبة أو معمارية          -&amp;gt; Opus 4.7
سير عمل terminal طويل          -&amp;gt; GPT-5.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;بهذه الطريقة لا تدفع سعر النموذج المتقدم لكل مهمة، ولا تحرم نفسك منه عندما يكون مفيدًا فعلًا. إذا كنت لا تزال تقارن أدوات البرمجة نفسها، راجع &lt;a href="http://apidog.com/blog/codex-vs-claude-code-vs-cursor-vs-copilot?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ملخص Codex vs Claude Code vs Cursor vs Copilot&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  اختبر النماذج على كودك خلال 20 دقيقة
&lt;/h2&gt;

&lt;p&gt;المعايير العامة مفيدة، لكنها لا تمثل مشروعك بالكامل. نفّذ اختبارًا صغيرًا داخل مستودعك قبل اعتماد نموذج افتراضي.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. اختر مهمة حقيقية
&lt;/h3&gt;

&lt;p&gt;اختر مهمة كنت ستعطيها عادةً لوكيل داخل Cursor، مثل:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;إصلاح bug مع خطوات إعادة إنتاج.&lt;/li&gt;
&lt;li&gt;إضافة endpoint صغير.&lt;/li&gt;
&lt;li&gt;refactor لدالة أو module.&lt;/li&gt;
&lt;li&gt;تحديث اختبارات موجودة.&lt;/li&gt;
&lt;li&gt;تعديل منطق يتعامل مع API خارجي.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;لا تستخدم مهمة مصطنعة. الهدف هو قياس النموذج على عملك الحقيقي.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. اكتب prompt واحدًا وثابتًا
&lt;/h3&gt;

&lt;p&gt;مثال:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;أصلح الخطأ التالي في وحدة الدفع.

السلوك الحالي:
- عند إرسال طلب refund لقيمة جزئية، يرجع النظام status=success
- لكن لا يتم تحديث refunded_amount في قاعدة البيانات

المطلوب:
- تتبع سبب الخطأ
- عدّل أقل عدد ممكن من الملفات
- أضف أو حدّث الاختبارات المناسبة
- لا تغيّر واجهة API الحالية
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;استخدم نفس النص مع كل نموذج.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. شغّل المهمة ثلاث مرات
&lt;/h3&gt;

&lt;p&gt;داخل Cursor، بدّل محدد النموذج بين:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer-2.5
Opus 4.7
GPT-5.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;حافظ على نفس الشروط:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;نفس الفرع.&lt;/li&gt;
&lt;li&gt;نفس prompt.&lt;/li&gt;
&lt;li&gt;نفس الاختبارات.&lt;/li&gt;
&lt;li&gt;نفس القيود.&lt;/li&gt;
&lt;li&gt;بدون تدخل يدوي أثناء التشغيل قدر الإمكان.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. قيّم النتائج
&lt;/h3&gt;

&lt;p&gt;استخدم جدولًا بسيطًا:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;النموذج&lt;/th&gt;
&lt;th&gt;هل اجتازت الاختبارات؟&lt;/th&gt;
&lt;th&gt;هل التعديل صغير ومفهوم؟&lt;/th&gt;
&lt;th&gt;الزمن&lt;/th&gt;
&lt;th&gt;التكلفة&lt;/th&gt;
&lt;th&gt;ملاحظات&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Composer 2.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Opus 4.7&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;لا تقيّم فقط "هل كتب كودًا؟". قيّم:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;هل حل المشكلة فعلًا؟&lt;/li&gt;
&lt;li&gt;هل كسر سلوكًا آخر؟&lt;/li&gt;
&lt;li&gt;هل اخترع API غير موجود؟&lt;/li&gt;
&lt;li&gt;هل أضاف تعقيدًا غير ضروري؟&lt;/li&gt;
&lt;li&gt;هل احتجت إلى تدخل بشري كثير؟&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. إذا كانت المهمة تتعامل مع API، اختبر الطلبات فعليًا
&lt;/h3&gt;

&lt;p&gt;إذا ولّد النموذج كودًا يستدعي endpoint، لا تعتمد فقط على unit tests. أرسل الطلبات عبر &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; وتحقق من:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;status codes.&lt;/li&gt;
&lt;li&gt;response body.&lt;/li&gt;
&lt;li&gt;authentication.&lt;/li&gt;
&lt;li&gt;headers.&lt;/li&gt;
&lt;li&gt;edge cases.&lt;/li&gt;
&lt;li&gt;تطابق schema مع المتوقع.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;بهذا يصبح معنى "نجح" هو أن نقطة النهاية تعمل فعلًا، وليس فقط أن الاختبارات المحلية أصبحت خضراء.&lt;/p&gt;

&lt;h2&gt;
  
  
  المعيار الذي لا تقيسه لوحات النتائج
&lt;/h2&gt;

&lt;p&gt;هناك فشل شائع في كل النماذج: كتابة كود API يبدو صحيحًا لكنه مبني على endpoints أو payloads يفترضها النموذج بدلًا من مواصفاتك الحقيقية.&lt;/p&gt;

&lt;p&gt;مثال:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// النموذج افترض أن endpoint موجود بهذا الشكل&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/users/update-profile&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;displayName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;avatarUrl&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;لكن API الحقيقي قد يكون:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;PATCH /v1/users/{id}
Content-Type: application/json
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;مع payload مختلف:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"profile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"avatar_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;الكود الأول قد يبدو نظيفًا، لكنه خاطئ. والأسوأ أنه قد يضيع وقتًا أطول من عدم وجود كود أصلًا، لأن شخصًا ما سيحتاج إلى اكتشاف الافتراض الخاطئ.&lt;/p&gt;

&lt;p&gt;الحل لا يعتمد على النموذج الذي تختاره:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;اربط النموذج بمواصفات API الحقيقية.&lt;/li&gt;
&lt;li&gt;اجعل Cursor يرى schema الفعلية.&lt;/li&gt;
&lt;li&gt;شغّل الطلبات الناتجة ضد API حية أو بيئة اختبار.&lt;/li&gt;
&lt;li&gt;ثبّت الطلبات الناجحة في اختبارات تلقائية.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;يمكنك تمرير مواصفات API إلى Cursor عبر MCP Server حتى يكتب النموذج وفق مخططك الفعلي، ثم تشغيل الطلبات في &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; للتحقق من status codes والحمولات والمصادقة قبل وصول الكود إلى مراجعة الفريق. يشرح &lt;a href="http://apidog.com/blog/connect-api-specifications-mcp-cursor?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل ربط مواصفات API في Cursor&lt;/a&gt; طريقة الإعداد.&lt;/p&gt;

&lt;p&gt;النموذج الذي تختاره يغيّر السرعة والتكلفة. أما حلقة التحقق فهي التي تمنع السرعة من التحول إلى ديون تصحيح أخطاء.&lt;/p&gt;

&lt;h2&gt;
  
  
  أسئلة شائعة
&lt;/h2&gt;

&lt;h3&gt;
  
  
  هل Composer 2.5 أفضل من Opus 4.7؟
&lt;/h3&gt;

&lt;p&gt;ليس دائمًا. في SWE-bench Multilingual، Composer 2.5 قريب جدًا: 79.8% مقابل 80.5%. وفي CursorBench بالإعدادات الافتراضية، يتقدم Composer 2.5 على Opus 4.7 الافتراضي. لكن Opus 4.7 يتصدر عند أقصى إعداداته. من ناحية القيمة مقابل التكلفة، Composer 2.5 هو الخيار الأفضل لمعظم المهام اليومية.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل Composer 2.5 أفضل من GPT-5.5؟
&lt;/h3&gt;

&lt;p&gt;يعتمد على نوع العمل. Composer 2.5 يتفوق في SWE-bench Multilingual و CursorBench. أما GPT-5.5 فيتقدم بوضوح في Terminal-bench 2.0. إذا كان عملك داخل المحرر وعلى ملفات المشروع، ابدأ بـ Composer 2.5. إذا كان عملك قائمًا على terminal، جرّب GPT-5.5.&lt;/p&gt;

&lt;h3&gt;
  
  
  لماذا Composer 2.5 أرخص بكثير؟
&lt;/h3&gt;

&lt;p&gt;لأنه مبني على قاعدة Kimi K2.5 مفتوحة المصدر وتم ضبطه خصيصًا لحلقة وكيل Cursor. هذا يعطي Cursor تحكمًا أكبر في الجدوى الاقتصادية مقارنة بالنماذج العامة المتقدمة ذات التسعير الأعلى.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل يمكنني استخدام النماذج الثلاثة داخل Cursor؟
&lt;/h3&gt;

&lt;p&gt;نعم. يمكنك التبديل من محدد النماذج لكل مهمة. وهذا ما يجعل الاستراتيجية الهجينة عملية: Composer 2.5 كافتراضي، مع Opus 4.7 و GPT-5.5 للحالات التي تستفيد منهما. راجع &lt;a href="http://apidog.com/blog/cursor-composer-2-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل Cursor Composer 2.5&lt;/a&gt; للإعداد.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخلاصة
&lt;/h2&gt;

&lt;p&gt;إذا قارنت أعلى أرقام المعايير فقط، فلكل من Opus 4.7 و GPT-5.5 نقاط قوة واضحة. لكن إذا قارنت الجودة مقابل الدولار في مهام تطوير يومية، فإن Composer 2.5 هو النموذج الذي يجب أن تبدأ به معظم الفرق كخيار افتراضي.&lt;/p&gt;

&lt;p&gt;النهج العملي:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ابدأ بـ Composer 2.5
ارفع إلى Opus 4.7 عند الحاجة لتفكير أعمق
استخدم GPT-5.5 عندما تهيمن terminal على المهمة
تحقق من أي كود API باستخدام مواصفاتك الحقيقية وطلبات فعلية
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;وأيًا كان النموذج الذي تختاره، لا تتركه يخمّن عقد API. اربطه بالمواصفات الحقيقية، ثم تحقق من الإخراج. يمكنك &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;تنزيل Apidog&lt;/a&gt; لإرسال طلبات حية ضد نقاط النهاية التي تم إنشاؤها وتثبيت الطلبات العاملة داخل الاختبارات التلقائية.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>كيفية بناء واجهات برمجة التطبيقات باستخدام Cursor Composer 2.5</title>
      <dc:creator>Yusuf Khalidd</dc:creator>
      <pubDate>Tue, 19 May 2026 02:26:56 +0000</pubDate>
      <link>https://forem.com/yusuf_khalidd/kyfy-bn-wjht-brmj-lttbyqt-bstkhdm-cursor-composer-25-c8l</link>
      <guid>https://forem.com/yusuf_khalidd/kyfy-bn-wjht-brmj-lttbyqt-bstkhdm-cursor-composer-25-c8l</guid>
      <description>&lt;p&gt;Cursor Composer 2.5 سريع ورخيص بما يكفي ليكتب وكيل AI عملاء API ومعالجات مسارات كاملة. لكن المشكلة تبدأ عند لمس خدمة حقيقية: قد يولّد النموذج طلبًا نظيفًا إلى &lt;code&gt;/v2/orders&lt;/code&gt; بينما خدمتك تستخدم فعليًا &lt;code&gt;/orders&lt;/code&gt; وتتوقع حمولة مختلفة. الكود يتجمّع، لكنه يفشل وقت التشغيل.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;جرّب Apidog اليوم&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;في هذا الدليل ستبني سير عمل عمليًا يقلل هذه الأخطاء: اربط Composer 2.5 بمواصفات API الحقيقية عبر MCP، اجعله يولّد الكود بناءً على العقد الفعلي، ثم اختبر النتيجة في &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; قبل أن تصل إلى زميل في الفريق. إذا كنت جديدًا على النموذج، فراجع &lt;a href="http://apidog.com/blog/cursor-composer-2-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل Cursor Composer 2.5&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  لماذا تخمّن النماذج الوكيلة أشكال API؟
&lt;/h2&gt;

&lt;p&gt;Composer 2.5 مصمم لمهام الوكيل الطويلة متعددة الخطوات. يمكنك أن تطلب منه:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;أضف عميلًا لخدمة الفوترة واربطه بسير عمل الدفع.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;سيخطط، يعدّل عدة ملفات، ويشغّل الاختبارات حتى تنجح. هذه ترقية مفيدة عن &lt;a href="http://apidog.com/blog/cursor-composer-2?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Composer 2&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;لكن المشكلة بنيوية: إذا لم يمتلك النموذج عقد API داخل السياق، فسيملأ الفراغ بما يراه “الأكثر احتمالًا”:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;أسماء حقول شائعة.&lt;/li&gt;
&lt;li&gt;اتفاقيات REST عامة.&lt;/li&gt;
&lt;li&gt;بادئات إصدار مثل &lt;code&gt;/v1&lt;/code&gt; أو &lt;code&gt;/v2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;أنماط مصادقة افتراضية.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;النتيجة تبدو صحيحة في مراجعة الكود، لكنها تفشل أمام خادمك لأن خادمك لا يمثل “متوسط” واجهات API على الإنترنت.&lt;/p&gt;

&lt;p&gt;أعراض شائعة:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;نقطة نهاية قريبة لكن خاطئة: &lt;code&gt;/api/users/{id}&lt;/code&gt; بدلًا من &lt;code&gt;/users/{userId}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;حقول مخترعة داخل body.&lt;/li&gt;
&lt;li&gt;مصادقة عامة بدل المخطط الفعلي لخدمتك.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;يمكنك لصق OpenAPI كاملًا في الدردشة، لكن هذا هش ويستهلك السياق بسرعة. الحل الأفضل هو إعطاء النموذج وصولًا منظمًا للمواصفات.&lt;/p&gt;

&lt;h2&gt;
  
  
  الحل: اربط Composer 2.5 بمواصفات API عبر MCP
&lt;/h2&gt;

&lt;p&gt;بروتوكول سياق النموذج MCP هو معيار مفتوح لإتاحة الأدوات والبيانات لنماذج AI. يدعم Cursor خوادم MCP، ويعرض &lt;a href="http://apidog.com/blog/connect-api-specifications-mcp-cursor?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;خادم Apidog MCP&lt;/a&gt; مواصفات API الموجودة في Apidog للنموذج كمصدر منظم يمكنه الاستعلام عنه أثناء كتابة الكود.&lt;/p&gt;

&lt;p&gt;بدل أن يخمّن Composer 2.5 نقاط النهاية والمخططات والمعاملات، يمكنه قراءتها من العقد الحقيقي ثم كتابة الكود بناءً عليها. هذا هو نفس مبدأ &lt;a href="http://apidog.com/blog/vibe-coding-with-apidog-mcp-server?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;الترميز السلس باستخدام خادم Apidog MCP&lt;/a&gt;، لكن مطبق على نموذج قادر على تنفيذ المهمة عبر عدة ملفات.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخطوة 1: جهّز مواصفات API في Apidog
&lt;/h2&gt;

&lt;p&gt;ابدأ من مصدر حقيقة واضح:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;صمّم API في Apidog، أو استورد مواصفات موجودة.&lt;/li&gt;
&lt;li&gt;تأكد من تحديث:

&lt;ul&gt;
&lt;li&gt;المسارات.&lt;/li&gt;
&lt;li&gt;معاملات query/path/header.&lt;/li&gt;
&lt;li&gt;مخططات request/response.&lt;/li&gt;
&lt;li&gt;أمثلة الاستجابات.&lt;/li&gt;
&lt;li&gt;حالات الخطأ مثل &lt;code&gt;400&lt;/code&gt; و&lt;code&gt;401&lt;/code&gt; و&lt;code&gt;422&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;إذا كان لديك OpenAPI أو Postman Collection، يمكنك استيرادها إلى Apidog. المهم أن تكون المواصفات دقيقة، لأن Composer 2.5 سيبني الكود بناءً عليها.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخطوة 2: اربط خادم Apidog MCP بـ Cursor
&lt;/h2&gt;

&lt;p&gt;يقرأ Cursor خوادم MCP من ملف إعداد داخل المشروع، غالبًا:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;.cursor/mcp.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;مثال تكوين نموذجي:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"apidog-api-spec"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"apidog-mcp-server@latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--project=&amp;lt;your-project-id&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"APIDOG_ACCESS_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;your-access-token&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;استبدل:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;your-project-id&amp;gt;&lt;/code&gt; بمعرّف مشروعك.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;your-access-token&amp;gt;&lt;/code&gt; برمز الوصول الخاص بك.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;استخدم الأمر والقيم الدقيقة من &lt;a href="http://apidog.com/blog/connect-api-specifications-mcp-cursor?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل إعداد Apidog MCP&lt;/a&gt;، لأن الإعدادات قد تختلف حسب حسابك وإصدار الخادم.&lt;/p&gt;

&lt;p&gt;بعد حفظ الملف، أعد تشغيل Cursor حتى يحمّل خادم MCP الجديد.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخطوة 3: تأكد أن Composer 2.5 يرى المواصفات
&lt;/h2&gt;

&lt;p&gt;قبل أن تطلب منه كتابة كود، اختبر الاتصال بسؤال قراءة فقط.&lt;/p&gt;

&lt;p&gt;افتح جلسة Agent في Cursor، اختر &lt;code&gt;composer-2.5&lt;/code&gt;، ثم اكتب:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;باستخدام خادم apidog-api-spec MCP، اذكر نقاط النهاية ضمن مورد الطلبات والحقول المطلوبة لإنشاء طلب.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;إذا أعاد نقاط النهاية والحقول الفعلية من مشروعك، فالاتصال يعمل.&lt;/p&gt;

&lt;p&gt;إذا أجاب بإجابة عامة أو اخترع مسارات، تحقق من:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;اسم الخادم داخل &lt;code&gt;mcp.json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;رمز الوصول.&lt;/li&gt;
&lt;li&gt;معرّف المشروع.&lt;/li&gt;
&lt;li&gt;أنك أعدت تشغيل Cursor.&lt;/li&gt;
&lt;li&gt;أن المواصفات موجودة ومحدّثة في Apidog.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  الخطوة 4: اجعله يولّد الكود وفقًا للعقد
&lt;/h2&gt;

&lt;p&gt;الآن أعطه المهمة الحقيقية، واذكر مصدر MCP صراحةً:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;باستخدام خادم apidog-api-spec كمصدر للحقيقة، اكتب عميل TypeScript مكتوبًا لواجهة orders API.

المطلوب:
- دالة createOrder.
- دالة getOrder.
- مطابقة مخططات الطلب والاستجابة بدقة.
- معالجة خطأ التحقق 422 كما تحدده المواصفات.
- عدم افتراض أي مسار أو حقل غير موجود في المواصفات.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;صياغة مثل “كمصدر للحقيقة” مهمة لأنها تقلل انجراف النموذج إلى الأنماط العامة.&lt;/p&gt;

&lt;p&gt;مثال هيكل ناتج متوقع:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;CreateOrderRequest&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;OrderResponse&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/orders&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;422&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ValidationError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Create order failed: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;النقطة ليست هذا الكود تحديدًا، بل أن المسار، الحقول، وأنواع الأخطاء يجب أن تأتي من المواصفات، لا من تخمين النموذج.&lt;/p&gt;

&lt;h2&gt;
  
  
  تحقق قبل أن تثق: حلقة اختبار Apidog
&lt;/h2&gt;

&lt;p&gt;ربط النموذج بالمواصفات يقلل الهلوسات، لكنه لا يلغي التحقق. قد تكون المواصفات متأخرة عن الخدمة الفعلية، أو قد يسيء النموذج قراءة حالة طرفية.&lt;/p&gt;

&lt;p&gt;استخدم هذه الحلقة:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;شغّل الطلبات المولّدة كطلبات حقيقية&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
خذ نقاط النهاية التي كتبها Composer 2.5 وشغّلها في &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; مقابل بيئة حقيقية أو mock. تحقق من:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;status code.&lt;/li&gt;
&lt;li&gt;response body.&lt;/li&gt;
&lt;li&gt;headers.&lt;/li&gt;
&lt;li&gt;المصادقة.&lt;/li&gt;
&lt;li&gt;حالات الخطأ.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;حوّل الطلبات الصحيحة إلى اختبارات&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
احفظ الطلبات التي تم التحقق منها كسيناريوهات اختبار تلقائية. بهذه الطريقة، يلتقط CI الانحدار بدلًا من المستخدم.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;استخدم mock لما لم يُبنَ بعد&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
إذا كتب النموذج عميلًا لنقطة نهاية لم تُشحن بعد من الخلفية، يمكن لخادم Apidog الوهمي إرجاع استجابات واقعية حتى يستمر عمل الواجهة الأمامية. هذا يتوافق مع الأنماط المذكورة في &lt;a href="http://apidog.com/blog/ai-agents-api-testing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;عملاء الذكاء الاصطناعي واختبار API&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;القاعدة العملية:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;النموذج يكتب المسودة الأولى وفقًا للعقد، وأنت تتحقق من أنها تعمل أمام خادم حقيقي.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  مثال عملي: إضافة ميزة استرداد أموال
&lt;/h2&gt;

&lt;p&gt;لنفترض أنك تضيف ميزة refund إلى خدمة المدفوعات.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. جهّز العقد
&lt;/h3&gt;

&lt;p&gt;تأكد أن مشروع Apidog يحتوي على:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;نقطة نهاية إنشاء استرداد.&lt;/li&gt;
&lt;li&gt;مخطط request.&lt;/li&gt;
&lt;li&gt;مخطط response.&lt;/li&gt;
&lt;li&gt;رأس &lt;code&gt;idempotency-key&lt;/code&gt; إذا كان مطلوبًا.&lt;/li&gt;
&lt;li&gt;حالات الخطأ، مثل &lt;code&gt;409&lt;/code&gt; عند التكرار.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. اطلب من Composer 2.5 التنفيذ
&lt;/h3&gt;

&lt;p&gt;استخدم مطالبة صريحة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;باستخدام apidog-api-spec، أنشئ refund client وخطاف React يستدعيه.

التزم بالتالي:
- اتبع مخطط create-refund بدقة.
- أرسل رأس idempotency-key كما تتطلب المواصفات.
- عالج 409 عند تكرار الطلب.
- أضف أنواع TypeScript من العقد.
- لا تضف حقولًا غير موجودة في المواصفات.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. راجع الملفات الناتجة
&lt;/h3&gt;

&lt;p&gt;توقع أن يعدّل ملفات مثل:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/api/refunds.ts
src/hooks/useCreateRefund.ts
src/types/refunds.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;راجع تحديدًا:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;هل المسار صحيح؟&lt;/li&gt;
&lt;li&gt;هل body مطابق للمخطط؟&lt;/li&gt;
&lt;li&gt;هل &lt;code&gt;idempotency-key&lt;/code&gt; موجود؟&lt;/li&gt;
&lt;li&gt;هل معالجة &lt;code&gt;409&lt;/code&gt; مطابقة للمواصفات؟&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. اختبر في Apidog
&lt;/h3&gt;

&lt;p&gt;افتح Apidog وشغّل:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;طلب &lt;code&gt;create-refund&lt;/code&gt; صالح.&lt;/li&gt;
&lt;li&gt;نفس الطلب مرة ثانية بنفس &lt;code&gt;idempotency-key&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;تحقق من سلوك &lt;code&gt;409&lt;/code&gt; عند التكرار.&lt;/li&gt;
&lt;li&gt;احفظ السيناريوهات كاختبارات.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ما تجنبته هنا: عميل ينسى رأس المثابرة، فيسمح باسترداد مكرر في بيئة اختبار أو إنتاج.&lt;/p&gt;

&lt;h2&gt;
  
  
  قائمة تحقق سريعة
&lt;/h2&gt;

&lt;p&gt;قبل دمج الكود الذي كتبه Composer 2.5، تحقق من الآتي:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] خادم MCP يعمل داخل Cursor.&lt;/li&gt;
&lt;li&gt;[ ] النموذج قرأ نقاط النهاية من Apidog، لا من المعرفة العامة.&lt;/li&gt;
&lt;li&gt;[ ] المسارات مطابقة للمواصفات.&lt;/li&gt;
&lt;li&gt;[ ] request body لا يحتوي حقولًا مخترعة.&lt;/li&gt;
&lt;li&gt;[ ] المصادقة مطابقة للعقد.&lt;/li&gt;
&lt;li&gt;[ ] حالات الخطأ المهمة معالجة.&lt;/li&gt;
&lt;li&gt;[ ] الطلبات شُغّلت في Apidog.&lt;/li&gt;
&lt;li&gt;[ ] الطلبات الصحيحة حُفظت كاختبارات.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  الأسئلة الشائعة
&lt;/h2&gt;

&lt;h3&gt;
  
  
  هل يدعم Composer 2.5 بروتوكول MCP؟
&lt;/h3&gt;

&lt;p&gt;نعم. لديه وصول إلى أدوات الوكيل في Cursor، بما في ذلك خوادم MCP. حدده من منتقي النموذج، ثم عرّف خادم MCP داخل مشروعك. راجع &lt;a href="http://apidog.com/blog/cursor-composer-2-5?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل Composer 2.5&lt;/a&gt; لمعرفة كيفية اختيار النموذج.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل أحتاج إلى Apidog لاستخدام MCP مع Composer 2.5؟
&lt;/h3&gt;

&lt;p&gt;تحتاج إلى مصدر مواصفات منظم. &lt;a href="http://apidog.com/blog/connect-api-specifications-mcp-cursor?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;خادم Apidog MCP&lt;/a&gt; هو المسار المستخدم هنا لأنه يجمع المواصفات، الاختبار، والمحاكاة في مكان واحد. توجد خيارات أخرى ضمن &lt;a href="http://apidog.com/blog/best-mcp-servers-for-cursor?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;أفضل خوادم MCP لـ Cursor&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل يمنع هذا كل هلوسات النموذج؟
&lt;/h3&gt;

&lt;p&gt;لا. لكنه يزيل فئة كبيرة من الأخطاء: المسارات والمخططات والحقول الخاطئة. لا يزال الاختبار ضروريًا لأن المواصفات قد تنحرف عن الخدمة الفعلية.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل يستحق الإعداد لمشروع صغير؟
&lt;/h3&gt;

&lt;p&gt;نعم، إذا كان النموذج يتعامل مع API حقيقية. الإعداد غالبًا ملف تكوين لمرة واحدة، والعائد أن كل استدعاء API يولّده النموذج يستند إلى عقدك بدل تخمين معقول.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخلاصة
&lt;/h2&gt;

&lt;p&gt;Composer 2.5 مفيد عندما يكتب كود API وفقًا لعقدك الفعلي، لا وفق أنماط عامة. اربط مواصفاتك عبر خادم Apidog MCP حتى يقرأ النموذج الحقيقة، ثم استخدم &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; لإرسال الطلبات، تأكيد الاستجابات، وتحويل السيناريوهات الصحيحة إلى اختبارات ومحاكاة. هذا هو سير العمل العملي: توليد قائم على المواصفات، ثم تحقق قبل الدمج.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>مؤلف المؤشر 2.5: ما هو، كيفية استخدامه، وكيفية الوصول إليه</title>
      <dc:creator>Yusuf Khalidd</dc:creator>
      <pubDate>Tue, 19 May 2026 02:25:56 +0000</pubDate>
      <link>https://forem.com/yusuf_khalidd/mwlf-lmwshr-25-m-hw-kyfy-stkhdmh-wkyfy-lwswl-lyh-5dpe</link>
      <guid>https://forem.com/yusuf_khalidd/mwlf-lmwshr-25-m-hw-kyfy-stkhdmh-wkyfy-lwswl-lyh-5dpe</guid>
      <description>&lt;p&gt;أطلقت Cursor نموذج Composer 2.5 في 18 مايو 2026. الفكرة العملية للمطورين واضحة: نموذج برمجة يقترب من Opus 4.7 وGPT-5.5 في معايير برمجية حقيقية، مع تكلفة أقل من دولار واحد لكل مهمة في نتائج Cursor المعلنة. إذا كنت تستخدم وكلاء البرمجة يوميًا، فهذا يغيّر طريقة توزيع المهام بينك وبين النموذج.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;جرّب Apidog اليوم&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;في هذا الدليل ستتعرف على: ما هو Composer 2.5، كيف تفعّله داخل Cursor، وكيف تستخدمه في مهام إنتاجية حقيقية، خصوصًا عند توليد كود يتعامل مع API باستخدام مواصفات فعلية بدل التخمين.&lt;/p&gt;

&lt;h2&gt;
  
  
  ما هو Cursor Composer 2.5؟
&lt;/h2&gt;

&lt;p&gt;Composer 2.5 هو نموذج برمجة عامل داخل Cursor. وظيفته ليست فقط اقتراح أسطر كود، بل تنفيذ مهام متعددة الخطوات: قراءة الملفات، تعديلها، تشغيل أوامر الطرفية، والتحقق من النتيجة داخل المحرر.&lt;/p&gt;

&lt;p&gt;إنه خليفة &lt;a href="http://apidog.com/blog/cursor-composer-2?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Composer 2&lt;/a&gt;، والفرق الأساسي أنه أقرب إلى وكيل قادر على إكمال مهمة طويلة بدل أن يكون مجرد مساعد إكمال سريع.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-101.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-101.png" alt="" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;أهم النقاط التقنية:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;بُني على نقطة التحقق مفتوحة المصدر &lt;a href="https://www.moonshot.ai/" rel="noopener noreferrer"&gt;Moonshot Kimi K2.5&lt;/a&gt;، وهي قاعدة بحوالي تريليون معلمة.&lt;/li&gt;
&lt;li&gt;خصصت Cursor نحو 85% من حوسبة التدريب للتدريب اللاحق والتعلم المعزز.&lt;/li&gt;
&lt;li&gt;تم تدريبه على 25 ضعفًا من المهام التركيبية مقارنة بـ Composer 2، بما في ذلك مهام حذف ميزة وإعادة بنائها حتى تنجح الاختبارات.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;النتيجة العملية: النموذج أفضل في الاحتفاظ بالسياق خلال مهام طويلة، وأقل ميلًا للانحراف عند تنفيذ تعديلات متعددة الملفات. هذا مهم عندما تطلب منه تنفيذ ميزة كاملة، لا مجرد إصلاح سطر واحد.&lt;/p&gt;

&lt;p&gt;إذا أردت خلفية أعمق عن الأساس الذي يبني عليه هذا الإصدار، راجع &lt;a href="http://apidog.com/blog/cursor-composer-2?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل Composer 2&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ماذا تغير تحت الغطاء؟
&lt;/h2&gt;

&lt;p&gt;ثلاثة تغييرات تفسر التحسن:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;تعلم معزز موجه بتغذية راجعة نصية&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
بدل مكافأة واحدة في نهاية المهمة، تستخدم Cursor تلميحات قصيرة توضّح التصحيح المطلوب، ثم تعيد إدخالها في سياق التدريب. هذا يساعد النموذج على تجنب أخطاء مثل استدعاء أدوات غير متاحة.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;بيانات تركيبية على نطاق أكبر&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
زيادة المهام التركيبية 25 ضعفًا تعني تدريبًا أكثر على سيناريوهات قريبة من المستودعات الحقيقية، مع التحقق عبر الاختبارات.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;بنية تدريب أسرع باستخدام Muon وHSDP&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
هذه ليست ميزة تستخدمها مباشرة، لكنها تسمح بتكرارات تدريب أسرع على نموذج كبير، ما ينعكس على جودة سلوك الوكيل.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;كمستخدم، لا تحتاج إلى حفظ التفاصيل. ما يهمك هو أن النموذج صار أنسب لمهام مثل:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;إضافة ميزة عبر عدة ملفات.&lt;/li&gt;
&lt;li&gt;تحديث اختبارات مع الكود.&lt;/li&gt;
&lt;li&gt;إصلاح خطأ بعد تشغيل الطرفية.&lt;/li&gt;
&lt;li&gt;توليد عميل API ثم التحقق من استجاباته.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  معايير Composer 2.5: ما مدى جودته؟
&lt;/h2&gt;

&lt;p&gt;تعرض Cursor نتائج تقارن Composer 2.5 مع Opus 4.7 وGPT-5.5:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;المعيار&lt;/th&gt;
&lt;th&gt;Composer 2.5&lt;/th&gt;
&lt;th&gt;Opus 4.7&lt;/th&gt;
&lt;th&gt;GPT-5.5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SWE-bench متعدد اللغات&lt;/td&gt;
&lt;td&gt;79.8%&lt;/td&gt;
&lt;td&gt;80.5%&lt;/td&gt;
&lt;td&gt;77.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terminal-Bench 2.0&lt;/td&gt;
&lt;td&gt;69.3%&lt;/td&gt;
&lt;td&gt;69.4%&lt;/td&gt;
&lt;td&gt;82.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CursorBench v3.1&lt;/td&gt;
&lt;td&gt;63.2%&lt;/td&gt;
&lt;td&gt;64.8% حد أقصى / 61.6% افتراضي&lt;/td&gt;
&lt;td&gt;59.2% افتراضي&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;كيف تقرأ هذه الأرقام عمليًا؟&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;في &lt;a href="https://www.swebench.com/" rel="noopener noreferrer"&gt;SWE-bench&lt;/a&gt; متعدد اللغات، يحقق Composer 2.5 نتيجة 79.8%، قريبًا جدًا من Opus 4.7 ومتقدمًا على GPT-5.5.&lt;/li&gt;
&lt;li&gt;في CursorBench، يتفوق على إعداد Opus 4.7 الافتراضي.&lt;/li&gt;
&lt;li&gt;في Terminal-Bench 2.0، يتأخر بوضوح عن GPT-5.5، لذلك انتبه إذا كان عملك يعتمد بكثافة على سلاسل أوامر طرفية طويلة.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;النقطة الأهم ليست أنه يفوز في كل معيار، بل أنه يقدّم جودة قريبة من النماذج الرائدة بتكلفة أقل بكثير لكل مهمة. توصلت تغطية مستقلة من &lt;a href="https://the-decoder.com/cursors-composer-2-5-matches-opus-4-7-and-gpt-5-5-benchmarks-at-a-fraction-of-the-cost/" rel="noopener noreferrer"&gt;The Decoder&lt;/a&gt; إلى النتيجة نفسها: جودة قريبة من المستوى الرائد بجزء من التكلفة.&lt;/p&gt;

&lt;h2&gt;
  
  
  كم يكلف Composer 2.5؟
&lt;/h2&gt;

&lt;p&gt;تقدم Cursor نوعين من Composer 2.5:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;النوع&lt;/th&gt;
&lt;th&gt;الإدخال&lt;/th&gt;
&lt;th&gt;الإخراج&lt;/th&gt;
&lt;th&gt;متى تستخدمه؟&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;القياسي&lt;/td&gt;
&lt;td&gt;$0.50 / مليون رمز&lt;/td&gt;
&lt;td&gt;$2.50 / مليون رمز&lt;/td&gt;
&lt;td&gt;للمهام الطويلة والحساسة للتكلفة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;السريع&lt;/td&gt;
&lt;td&gt;$3.00 / مليون رمز&lt;/td&gt;
&lt;td&gt;$15.00 / مليون رمز&lt;/td&gt;
&lt;td&gt;للتكرار المباشر عندما يهمك زمن الاستجابة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;النوع السريع يقدّم نفس الذكاء مع زمن استجابة أقل، وهو عادة الإعداد الافتراضي في المنتج.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-102.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-102.png" alt="" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;طريقة الفوترة تعتمد على خطتك:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;الخطط الفردية&lt;/strong&gt; مثل Pro تتضمن مجمع استخدام Composer مستقلًا.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;خطط الفرق والمؤسسات&lt;/strong&gt; تُحاسب بسعر API مباشرة.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;عرض الإطلاق&lt;/strong&gt;: ضاعفت Cursor استخدام Composer 2.5 للأسبوع الأول بعد الإصدار.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;للتفاصيل، راجع &lt;a href="http://apidog.com/blog/cursor-composer-pricing?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل تسعير Cursor Composer&lt;/a&gt;. وإذا أردت تجربة الاستخدام المضمن قبل الدفع، اقرأ &lt;a href="http://apidog.com/blog/cursor-composer-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;شرح استخدام Composer مجانًا&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  كيفية الوصول إلى Cursor Composer 2.5
&lt;/h2&gt;

&lt;p&gt;اتبع هذه الخطوات داخل Cursor:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;حدّث Cursor&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
افتح Cursor وتحقق من التحديثات. على macOS من قائمة Cursor، وعلى الأنظمة الأخرى من قائمة Help. أعد التشغيل بعد التحديث.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;سجّل الدخول إلى حساب مناسب&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
خطط Pro وBusiness تتضمن استخدام Composer. الحساب المجاني قد يسمح بالتجربة عبر البدلات المضمنة، لكن الاستخدام الكثيف يحتاج خطة مدفوعة.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;افتح منتقي النموذج&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ابدأ جلسة Chat أو Agent، ثم افتح قائمة النماذج.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;اختر النموذج&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
اختر:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer-2.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;استخدم وضع Agent&lt;/strong&gt;
لا تستخدمه كدردشة عادية إذا كنت تريد تعديلات ملفات وتشغيل اختبارات. Composer 2.5 مصمم للعمل كوكيل.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;بعد ذلك يستطيع النموذج استخدام أدوات Cursor المتاحة: قراءة الملفات، تعديلها، تشغيل الطرفية، واستدعاء الأدوات. راجع &lt;a href="https://cursor.com/docs/models/cursor-composer-2-5" rel="noopener noreferrer"&gt;وثائق Composer 2.5 الرسمية&lt;/a&gt; لمعرفة الإعدادات الحالية إذا تغيرت.&lt;/p&gt;

&lt;p&gt;إذا كنت جديدًا على واجهة الوكيل في Cursor، ابدأ من &lt;a href="http://apidog.com/blog/cursor-2-0?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;نظرة Cursor 2.0&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  كيفية استخدام Composer 2.5 بفعالية
&lt;/h2&gt;

&lt;p&gt;الوصول إلى النموذج سهل. جودة النتائج تعتمد على طريقة صياغة المهمة.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. أعطه مهمة كاملة لا تعليمات صغيرة
&lt;/h3&gt;

&lt;p&gt;بدلًا من:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;عدّل هذا الملف.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;اكتب:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;أضف ترقيم صفحات إلى endpoint الطلبات.
حدّث service وcontroller والاختبارات.
يجب أن تقبل الصفحة page وlimit.
تأكد أن جميع الاختبارات الحالية تستمر بالنجاح.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;النموذج أفضل عندما تعطيه حالة نهائية واضحة.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. اكتب شرط النجاح
&lt;/h3&gt;

&lt;p&gt;مثال جيد:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;اعتبر المهمة مكتملة فقط إذا:
- نجحت جميع الاختبارات الحالية.
- أُضيفت اختبارات للحالة الجديدة.
- تعيد نقطة النهاية 422 عند تمرير limit غير صالح.
- لا يتغير شكل الاستجابة الحالي إلا بإضافة pagination metadata.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;هذا يدفع النموذج للتحقق بدل الاكتفاء بتعديل الكود.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. اختر النوع حسب سير العمل
&lt;/h3&gt;

&lt;p&gt;استخدم:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Standard&lt;/strong&gt; عندما تطلب مهام طويلة أو دفعات عمل.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast&lt;/strong&gt; عندما تنتظر الرد أثناء التطوير المباشر.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;الجودة نفسها، لكنك توازن بين الزمن والتكلفة.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. لا تجعله يخمن شكل API
&lt;/h3&gt;

&lt;p&gt;أكبر خطأ في مهام API هو أن النموذج قد يخترع endpoint أو حقلًا أو طريقة مصادقة تبدو منطقية لكنها غير موجودة.&lt;/p&gt;

&lt;p&gt;إذا كتبت:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;اكتب client لخدمة المدفوعات.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;قد ينتج كودًا نظيفًا لكنه مبني على افتراضات.&lt;/p&gt;

&lt;p&gt;الأفضل:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;استخدم مواصفات OpenAPI المرفقة لخدمة المدفوعات.
أنشئ TypeScript client للعمليات التالية فقط:
- إنشاء دفعة
- جلب حالة دفعة
- إلغاء دفعة
ثم أضف اختبارات تغطي 200 و400 و401.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Composer 2.5 مع سير عمل API
&lt;/h2&gt;

&lt;p&gt;معظم مهام البرمجة الإنتاجية تلمس API بشكل مباشر. لذلك تحتاج إلى حلقة عمل تمنع التخمين:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;أعطِ النموذج مواصفات API الحقيقية.&lt;/li&gt;
&lt;li&gt;اجعله يولّد الكود والاختبارات بناءً على المواصفات.&lt;/li&gt;
&lt;li&gt;اختبر الطلبات فعليًا.&lt;/li&gt;
&lt;li&gt;ثبّت السلوك الناجح في اختبارات أو mock server.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;يمكنك ربط مواصفات API في Apidog مع Cursor عبر &lt;a href="http://apidog.com/blog/connect-api-specifications-mcp-cursor?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;خادم Apidog MCP&lt;/a&gt;، بحيث يكتب Composer 2.5 الكود اعتمادًا على المخطط الحقيقي لا على التخمين. وإذا كنت تستخدم وكلاء أخرى، راجع &lt;a href="http://apidog.com/blog/best-mcp-servers-for-cursor?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;أفضل خوادم MCP لـ Cursor&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;بعد توليد الكود، افتح الطلبات في &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;، وأرسل طلبات حقيقية، وتحقق من:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;رموز الحالة.&lt;/li&gt;
&lt;li&gt;شكل الاستجابة.&lt;/li&gt;
&lt;li&gt;المصادقة.&lt;/li&gt;
&lt;li&gt;رسائل الخطأ.&lt;/li&gt;
&lt;li&gt;الحالات الحدية.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;الفكرة ليست أن النموذج لا يخطئ، بل أن تجعل الخطأ يُكتشف قبل أن يصل إلى فرع زميلك.&lt;/p&gt;

&lt;h2&gt;
  
  
  مثال عملي لمطالبة جيدة
&lt;/h2&gt;

&lt;p&gt;استخدم قالبًا مثل هذا عند العمل على API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;أنت تعمل داخل مستودع Node.js/TypeScript.

المطلوب:
أضف دعم endpoint جديد لجلب طلبات المستخدم مع pagination.

المصدر الحقيقي:
استخدم مواصفات API المتاحة عبر MCP ولا تخترع حقولًا غير موجودة.

الخطوات:
1. افحص بنية المشروع الحالية.
2. حدّد الملفات التي تحتاج تعديلًا.
3. أضف types بناءً على schema الحقيقي.
4. أضف client method للطلب الجديد.
5. أضف اختبارات تغطي:
   - استجابة ناجحة 200
   - page غير صالح
   - limit غير صالح
   - حالة 401
6. شغّل الاختبارات.
7. أصلح أي فشل قبل إنهاء المهمة.

شرط النجاح:
لا تعتبر المهمة منتهية حتى تنجح الاختبارات ويطابق شكل الاستجابة مواصفات API.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;هذا النوع من التعليمات يعطي Composer 2.5 مساحة للعمل، لكنه يضع حدودًا واضحة للتحقق.&lt;/p&gt;

&lt;h2&gt;
  
  
  Composer 2.5 مقابل المنافسة
&lt;/h2&gt;

&lt;p&gt;إذا كنت تختار أداة يومية، استخدم هذا التوجيه السريع:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;مقابل Opus 4.7&lt;/strong&gt;: قريب جدًا في SWE-bench متعدد اللغات وCursorBench، وأرخص بكثير لكل مهمة. ما زال Opus يتفوق في بعض الإعدادات القصوى.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;مقابل GPT-5.5&lt;/strong&gt;: يتقدم Composer 2.5 في SWE-bench متعدد اللغات وCursorBench، بينما يتفوق GPT-5.5 في Terminal-Bench 2.0.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;مقابل Claude Code&lt;/strong&gt;: Composer 2.5 يعمل داخل محرر Cursor، بينما Claude Code وكيل طرفية. راجع &lt;a href="http://apidog.com/blog/claude-code-vs-cursor-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;مقارنة Claude Code مقابل Cursor&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;مقابل GitHub Copilot&lt;/strong&gt;: Copilot قوي في الإكمال المدمج، بينما Composer 2.5 أفضل كوكيل لمهام متعددة الملفات. اقرأ &lt;a href="http://apidog.com/blog/cursor-ai-vs-github-copilot?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل Cursor مقابل GitHub Copilot&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ذكرت Cursor أيضًا أنها تدرب نموذجًا أكبر بالتعاون مع xAI باستخدام نحو عشرة أضعاف قوة الحوسبة، لذلك يبدو Composer 2.5 أقرب إلى مرحلة في مسار تطور أكبر، لا نقطة النهاية.&lt;/p&gt;

&lt;h2&gt;
  
  
  الأسئلة المتكررة
&lt;/h2&gt;

&lt;h3&gt;
  
  
  هل Composer 2.5 مجاني؟
&lt;/h3&gt;

&lt;p&gt;لا توجد طبقة مجانية بالكامل، لكن الخطط الفردية تتضمن استخدامًا مدمجًا يغطي كثيرًا من العمل اليومي. راجع &lt;a href="http://apidog.com/blog/cursor-composer-for-free?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل استخدام Composer مجانًا&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل Composer 2.5 أفضل من Composer 2؟
&lt;/h3&gt;

&lt;p&gt;نعم. ارتفع SWE-bench متعدد اللغات من 73.7% إلى 79.8%، وتحسن احتفاظ النموذج بالسياق في المهام الطويلة. راجع &lt;a href="http://apidog.com/blog/cursor-composer-2?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل Composer 2&lt;/a&gt; لفهم الأساس.&lt;/p&gt;

&lt;h3&gt;
  
  
  على أي نموذج يعتمد Composer 2.5؟
&lt;/h3&gt;

&lt;p&gt;يعتمد على نقطة التحقق Kimi K2.5 مفتوحة المصدر من Moonshot، ثم دربته Cursor بشكل مكثف باستخدام التعلم المعزز والمهام التركيبية.&lt;/p&gt;

&lt;h3&gt;
  
  
  أي نوع أختار: القياسي أم السريع؟
&lt;/h3&gt;

&lt;p&gt;اختر &lt;strong&gt;القياسي&lt;/strong&gt; للمهام الطويلة أو المتكررة بتكلفة أقل. اختر &lt;strong&gt;السريع&lt;/strong&gt; عندما تعمل تفاعليًا وتحتاج زمن استجابة أقل. الذكاء نفسه.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل يعمل Composer 2.5 مع مواصفات API وMCP؟
&lt;/h3&gt;

&lt;p&gt;نعم. يدعم أدوات وكيل Cursor، بما في ذلك MCP. يمكنك ربط مواصفات API عبر &lt;a href="http://apidog.com/blog/connect-api-specifications-mcp-cursor?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;خادم Apidog MCP&lt;/a&gt; حتى يكتب النموذج الكود بناءً على schema حقيقي.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخلاصة
&lt;/h2&gt;

&lt;p&gt;Composer 2.5 يجعل استخدام وكيل برمجة قوي داخل Cursor أكثر قابلية للتطبيق اليومي: جودة قريبة من النماذج الرائدة، تكلفة أقل لكل مهمة، وسلوك أفضل في المهام متعددة الخطوات.&lt;/p&gt;

&lt;p&gt;للاستخدام العملي:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;حدّث Cursor.&lt;/li&gt;
&lt;li&gt;اختر &lt;code&gt;composer-2.5&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;استخدم وضع Agent.&lt;/li&gt;
&lt;li&gt;أعطه مهمة كاملة مع شرط نجاح واضح.&lt;/li&gt;
&lt;li&gt;لا تجعله يخمن API.&lt;/li&gt;
&lt;li&gt;تحقق من الطلبات والاستجابات قبل الدمج.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;عند العمل على APIs، اربطه بمواصفاتك الحقيقية ثم &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;قم بتنزيل Apidog&lt;/a&gt; لاختبار الطلبات، تأكيد الاستجابات، وتحويل السلوك الصحيح إلى اختبارات آلية أو mock servers. الكود السريع مفيد فقط عندما يكون قابلًا للتحقق.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Bitwarden Agent Access: كيفية مشاركة بيانات اعتماد الخزنة بشكل آمن مع وكلاء ترميز الذكاء الاصطناعي</title>
      <dc:creator>Yusuf Khalidd</dc:creator>
      <pubDate>Fri, 15 May 2026 08:12:21 +0000</pubDate>
      <link>https://forem.com/yusuf_khalidd/bitwarden-agent-access-kyfy-mshrk-bynt-tmd-lkhzn-bshkl-amn-m-wkl-trmyz-ldhk-lstny-30f</link>
      <guid>https://forem.com/yusuf_khalidd/bitwarden-agent-access-kyfy-mshrk-bynt-tmd-lkhzn-bshkl-amn-m-wkl-trmyz-ldhk-lstny-30f</guid>
      <description>&lt;p&gt;إذا كنت تستخدم Claude Code أو Codex أو Cursor مع أي شيء يتصل بواجهة برمجة تطبيقات حقيقية، فالمشكلة العملية هي بيانات الاعتماد: الوكيل يحتاجها، ومدير كلمات المرور لا يريد تسريبها. لصق مفتاح API داخل المحادثة يضعه في سياق النموذج. وضعه في ملف &lt;code&gt;.env&lt;/code&gt; يجعله قابلًا للقراءة من أي أمر يشغله الوكيل. الحل الأفضل هو إعطاء الوكيل أقل قدر ممكن من الأسرار، وفي وقت التشغيل فقط.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;جرّب Apidog اليوم&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;مشروع Bitwarden مفتوح المصدر، &lt;a href="https://github.com/bitwarden/agent-access" rel="noopener noreferrer"&gt;Agent Access&lt;/a&gt;، يحاول حل هذه الفجوة عمليًا. يوفر بروتوكولًا لمشاركة بيانات الاعتماد، وواجهة سطر أوامر باسم &lt;code&gt;aac&lt;/code&gt;، وحزم SDK بلغة Rust وPython لبناء نفق مشفر بين مدير كلمات المرور وعملية بعيدة مثل وكيل AI، أو مهمة CI، أو سكريبت محلي.&lt;/p&gt;

&lt;p&gt;في هذا الدليل ستتعلم كيف تثبت Agent Access، تستخدم &lt;code&gt;aac connect&lt;/code&gt; لجلب بيانات اعتماد محددة النطاق، وتستخدم &lt;code&gt;aac run&lt;/code&gt; لحقن الأسرار في بيئة عملية فرعية بدون كشفها للوكيل. هذا يكمل أنماط النظافة الأمنية الموضحة في &lt;a href="http://apidog.com/blog/secure-ai-agent-api-credentials?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;كيفية تأمين بيانات اعتماد واجهة برمجة تطبيقات وكيل الذكاء الاصطناعي&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ما هو Agent Access؟
&lt;/h2&gt;

&lt;p&gt;Agent Access هو بروتوكول مفتوح وتطبيق مرجعي من Bitwarden، لكنه مصمم بحيث يمكن لأي مدير كلمات مرور تبنيه. يعمل عبر طرفين:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Provider&lt;/strong&gt;: الجهاز أو الخدمة التي تمتلك الوصول إلى القبو.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consumer&lt;/strong&gt;: الوكيل، السكريبت، أو مهمة CI التي تحتاج إلى بيانات اعتماد محددة.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;تستخدم أداة &lt;code&gt;aac&lt;/code&gt; نفقًا مشفرًا من طرف إلى طرف عبر &lt;a href="https://noiseprotocol.org/" rel="noopener noreferrer"&gt;Noise Protocol&lt;/a&gt;. يطلب المستهلك بيانات اعتماد حسب النطاق أو معرف عنصر القبو، ويقرر المزود ما الذي يُرجع. المستهلك لا يرى القبو بالكامل، والمزود لا يحتاج لمعرفة ما الذي ستفعله العملية بالسر بعد استلامه.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6felrvem0ts4fxuk62us.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6felrvem0ts4fxuk62us.png" alt="Agent Access architecture" width="800" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;المشروع في &lt;strong&gt;معاينة مبكرة&lt;/strong&gt;. يوضح README أن واجهات API والبروتوكول قابلة للتغيير، وأنه لا يُنصح بإدخال بيانات الاعتماد الحساسة مباشرة في LLMs أو وكلاء الذكاء الاصطناعي.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;النمط العملي الموصى به هو استخدام &lt;code&gt;aac run&lt;/code&gt;: اجلب السر وقت التشغيل، احقنه كمتغير بيئة في عملية فرعية، ولا تعرضه في stdout أو في سياق النموذج.&lt;/p&gt;

&lt;h2&gt;
  
  
  لماذا هذا مهم؟
&lt;/h2&gt;

&lt;p&gt;وكلاء البرمجة لم يعودوا يكتبون كودًا فقط. Claude Code وCodex وCursor يمكنهم قراءة المستودع، تشغيل الاختبارات، استدعاء APIs، وبدء عمليات نشر. كل خطوة قد تحتاج إلى بيانات اعتماد.&lt;/p&gt;

&lt;p&gt;حادثة &lt;a href="http://apidog.com/blog/postman-exposed-api-keys-audit-workspace?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;مفاتيح API المكشوفة في Postman&lt;/a&gt; أوضحت أن إدارة الأسرار صعبة حتى بدون وكلاء. مع الوكلاء، يصبح الخطر أكبر لأن الأداة تستطيع تشغيل أوامر وقراءة ملفات وإرسال مخرجات.&lt;/p&gt;

&lt;p&gt;القاعدة العملية:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;لا تثق بالوكيل أكثر. أعطه أقل.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agent Access يطبق ذلك عبر:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;بيانات اعتماد محددة النطاق.&lt;/li&gt;
&lt;li&gt;تشفير أثناء النقل.&lt;/li&gt;
&lt;li&gt;جلب في وقت التشغيل.&lt;/li&gt;
&lt;li&gt;عدم حفظ الأسرار على القرص افتراضيًا.&lt;/li&gt;
&lt;li&gt;عزل السر داخل عملية فرعية عند استخدام &lt;code&gt;aac run&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;للمقارنة مع أدوات إدارة المفاتيح الأخرى، راجع &lt;a href="http://apidog.com/blog/api-key-management-tools?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;أدوات إدارة مفاتيح API&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  التثبيت
&lt;/h2&gt;

&lt;p&gt;اختر الحزمة المناسبة لنظامك.&lt;/p&gt;

&lt;h3&gt;
  
  
  macOS Apple Silicon
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; https://github.com/bitwarden/agent-access/releases/latest/download/aac-macos-aarch64.tar.gz | &lt;span class="nb"&gt;tar &lt;/span&gt;xz
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;aac /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  macOS Intel
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; https://github.com/bitwarden/agent-access/releases/latest/download/aac-macos-x86_64.tar.gz | &lt;span class="nb"&gt;tar &lt;/span&gt;xz
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;aac /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Linux x86_64
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; https://github.com/bitwarden/agent-access/releases/latest/download/aac-linux-x86_64.tar.gz | &lt;span class="nb"&gt;tar &lt;/span&gt;xz
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;aac /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows x86_64
&lt;/h3&gt;

&lt;p&gt;نزّل &lt;code&gt;aac-windows-x86_64.zip&lt;/code&gt; من &lt;a href="https://github.com/bitwarden/agent-access/releases" rel="noopener noreferrer"&gt;صفحة الإصدارات&lt;/a&gt;، ثم استخرجه إلى مجلد موجود في متغير &lt;code&gt;PATH&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;تحقق من التثبيت:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;إذا كان Bitwarden CLI (&lt;code&gt;bw&lt;/code&gt;) موجودًا في &lt;code&gt;PATH&lt;/code&gt;، فسيستخدمه &lt;code&gt;aac&lt;/code&gt; كمزود افتراضي. للتجربة بدون Bitwarden، استخدم المزود التجريبي:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac &lt;span class="nt"&gt;--provider&lt;/span&gt; example &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  بدء سريع: الإقران وجلب بيانات الاعتماد
&lt;/h2&gt;

&lt;p&gt;شغّل المستمع على الجهاز الذي لديه الوصول إلى القبو، غالبًا جهازك المحلي:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac listen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;سيطبع الأمر رمز إقران. من جهة المستهلك، نفّذ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac connect &lt;span class="nt"&gt;--token&lt;/span&gt; &amp;lt;pairing-token&amp;gt; &lt;span class="nt"&gt;--domain&lt;/span&gt; github.com &lt;span class="nt"&gt;--output&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;الناتج سيكون مشابهًا:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"credential"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"notes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alligator5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"totp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"uri"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://github.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"example"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"domain"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"github.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;يمكنك أيضًا الجلب حسب معرف عنصر القبو بدل النطاق:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac connect &lt;span class="nt"&gt;--id&lt;/span&gt; &amp;lt;vault-item-id&amp;gt; &lt;span class="nt"&gt;--output&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ملاحظات مهمة:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--id&lt;/code&gt; و&lt;code&gt;--domain&lt;/code&gt; لا يُستخدمان معًا.&lt;/li&gt;
&lt;li&gt;إذا كان عنصر القبو يحتوي على TOTP، فسيظهر ضمن الحمولة.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--output json&lt;/code&gt; مناسب للسكريبتات التي تريد تحليل الناتج مباشرة.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;مثال بسيط باستخدام &lt;code&gt;jq&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;aac connect &lt;span class="nt"&gt;--domain&lt;/span&gt; github.com &lt;span class="nt"&gt;--output&lt;/span&gt; json | jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.credential.password'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;لكن انتبه: هذا النمط قد يضع السر في متغير داخل shell. في معظم حالات الوكلاء، استخدم &lt;code&gt;aac run&lt;/code&gt; بدلًا من ذلك.&lt;/p&gt;

&lt;h2&gt;
  
  
  استخدام &lt;code&gt;aac run&lt;/code&gt; لحقن الأسرار في البيئة
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;aac run&lt;/code&gt; هو النمط الأكثر أمانًا مع وكلاء AI. بدل طباعة السر، يشغل عملية فرعية ويحقن القيم المطلوبة كمتغيرات بيئة.&lt;/p&gt;

&lt;h3&gt;
  
  
  حقن حقول محددة
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac run &lt;span class="nt"&gt;--domain&lt;/span&gt; example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;DB_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;password &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;DB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;username &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; psql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;في هذا المثال:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;قيمة حقل &lt;code&gt;password&lt;/code&gt; تصبح &lt;code&gt;DB_PASSWORD&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;قيمة حقل &lt;code&gt;username&lt;/code&gt; تصبح &lt;code&gt;DB_USER&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;العملية الفرعية &lt;code&gt;psql&lt;/code&gt; فقط هي التي تستقبل المتغيرات.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  حقن كل الحقول
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac run &lt;span class="nt"&gt;--domain&lt;/span&gt; example.com &lt;span class="nt"&gt;--env-all&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; ./deploy.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;سيتم حقن الحقول المتاحة ببادئة افتراضية مثل &lt;code&gt;AAC_&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  دمج &lt;code&gt;--env-all&lt;/code&gt; مع أسماء مخصصة
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac run &lt;span class="nt"&gt;--domain&lt;/span&gt; example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env-all&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;CUSTOM_PW&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;password &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; ./deploy.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;الحقول المتاحة:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;username&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;password&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;totp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uri&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;notes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;domain&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;credential_id&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  نمط عملي مع سكريبت نشر
&lt;/h2&gt;

&lt;p&gt;بدل أن تجعل Claude Code أو Codex يعرف المفتاح، اجعل الوكيل يستدعي سكريبتًا مغلفًا بـ &lt;code&gt;aac run&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# deploy.sh&lt;/span&gt;
&lt;span class="c"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-euo&lt;/span&gt; pipefail

aac run &lt;span class="nt"&gt;--domain&lt;/span&gt; api.example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;API_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;password &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; ./run-deploy.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ثم داخل &lt;code&gt;run-deploy.sh&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-euo&lt;/span&gt; pipefail

curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$API_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://api.example.com/deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;بهذا الشكل:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;الوكيل يرى الأمر &lt;code&gt;./deploy.sh&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;السر لا يظهر في المحادثة.&lt;/li&gt;
&lt;li&gt;السر لا يُكتب إلى ملف.&lt;/li&gt;
&lt;li&gt;السر موجود فقط داخل بيئة العملية الفرعية.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;هذا يطبق نفس مبدأ العزل الموضح في &lt;a href="http://apidog.com/blog/secure-ai-agent-api-credentials?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;كيفية تأمين بيانات اعتماد واجهة برمجة تطبيقات وكيل الذكاء الاصطناعي&lt;/a&gt;، لكن بأداة قابلة للتنفيذ.&lt;/p&gt;

&lt;h2&gt;
  
  
  استخدام SDKs بلغة Python وRust
&lt;/h2&gt;

&lt;p&gt;إذا كنت تريد تضمين Agent Access داخل تطبيقك بدل استدعاء CLI، يمكنك استخدام SDK.&lt;/p&gt;

&lt;h3&gt;
  
  
  Python
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agent_access&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;RemoteClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RemoteClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python-remote&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ABC-DEF-GHI&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;cred&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request_credential&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cred&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cred&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;وحدة Python مبنية فوق PyO3، لذلك يبقى تنفيذ البروتوكول الأساسي في Rust مع توفير واجهة Python.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rust
&lt;/h3&gt;

&lt;p&gt;توفر حزمة Rust واجهة &lt;code&gt;RemoteClient&lt;/code&gt; كمكتبة مباشرة. التطبيقات المرجعية موجودة في المستودع تحت:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;examples/rust-remote/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;استخدم Rust SDK عندما تبني:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CLI مخصصًا.&lt;/li&gt;
&lt;li&gt;build runner.&lt;/li&gt;
&lt;li&gt;خدمة داخلية توزعها كثنائي compiled.&lt;/li&gt;
&lt;li&gt;أداة تحتاج إلى دمج Agent Access بدون shell wrapper.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;إذا كان فريقك يستخدم أدوات مثل &lt;a href="http://apidog.com/blog/integrate-hashicorp-vault?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;HashiCorp Vault&lt;/a&gt; أو &lt;a href="http://apidog.com/blog/integrate-azure-key-vault?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Azure Key Vault&lt;/a&gt;، فاعتبر Agent Access طبقة مناسبة أكثر لحالات أجهزة المطورين ومشغلات CI، وليس بديلًا كاملًا لخزائن الأسرار المؤسسية.&lt;/p&gt;

&lt;h2&gt;
  
  
  التكامل مع وكلاء برمجة الذكاء الاصطناعي
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Claude Code
&lt;/h3&gt;

&lt;p&gt;اجعل Claude Code يستدعي سكريبتًا بدل التعامل مع السر مباشرة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# deploy.sh&lt;/span&gt;
&lt;span class="c"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-euo&lt;/span&gt; pipefail

aac run &lt;span class="nt"&gt;--domain&lt;/span&gt; prod.example.com &lt;span class="nt"&gt;--env-all&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; ./run-deploy.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;أضف السكريبت إلى مشروعك، ثم وجّه سير العمل إليه. الوكيل ينفذ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./deploy.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ولا يرى بيانات الاعتماد.&lt;/p&gt;

&lt;p&gt;يمتد نفس النمط إلى CI مع &lt;a href="http://apidog.com/blog/claude-code-github-actions?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Claude Code GitHub Actions&lt;/a&gt;: ثبّت &lt;code&gt;aac&lt;/code&gt; في runner، اربطه بمزود القبو، واجعل خطوات النشر أو الاختبار تعمل عبر &lt;code&gt;aac run&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAI Codex
&lt;/h3&gt;

&lt;p&gt;في Codex CLI، يرى النموذج الأوامر التي سيستدعيها. لذلك لا تمرر المفتاح داخل الأمر. استخدم wrapper:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# test-api.sh&lt;/span&gt;
&lt;span class="c"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-euo&lt;/span&gt; pipefail

aac run &lt;span class="nt"&gt;--domain&lt;/span&gt; staging.example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;password &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; npm run &lt;span class="nb"&gt;test&lt;/span&gt;:api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;بهذا يبقى المفتاح خارج سياق النموذج. للمزيد حول استخدام Codex في سيناريوهات أوسع، راجع &lt;a href="http://apidog.com/blog/openai-codex-from-your-phone?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Codex من هاتفك&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cursor
&lt;/h3&gt;

&lt;p&gt;مع أوامر الطرفية وComposer في Cursor، استخدم نفس السكريبتات المغلفة بـ &lt;code&gt;aac run&lt;/code&gt;. غالبًا سيكون المستمع والمستهلك على نفس الجهاز لأن Cursor يركز على التحرير المحلي.&lt;/p&gt;

&lt;p&gt;مثال:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac run &lt;span class="nt"&gt;--domain&lt;/span&gt; dev.example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;DATABASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;uri &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  OpenClaw
&lt;/h3&gt;

&lt;p&gt;يوفر Agent Access &lt;strong&gt;مهارة OpenClaw&lt;/strong&gt; رسمية جاهزة للاستخدام، وملف &lt;code&gt;SKILL.md&lt;/code&gt; موجود في المستودع. إذا كنت تستخدم مهارات على نمط OpenClaw، فهذا هو التكامل الأكثر مباشرة: المهارة تعرف البروتوكول، تجلب بيانات الاعتماد، ثم تمررها للأداة التابعة.&lt;/p&gt;

&lt;p&gt;راجع أيضًا &lt;a href="http://apidog.com/blog/openclaw-api-keys?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل مفاتيح API لـ OpenClaw&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  نموذج الأمان
&lt;/h2&gt;

&lt;p&gt;ثلاث نقاط يجب فهمها قبل الاعتماد على Agent Access:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;تشفير من طرف إلى طرف عبر Noise&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
الاتصال بين المستهلك والمزود مشفر باستخدام &lt;a href="https://noiseprotocol.org/" rel="noopener noreferrer"&gt;Noise Protocol Framework&lt;/a&gt;، وهي نفس عائلة المصافحة التي تستخدمها أنظمة مثل WireGuard وSignal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;بيانات اعتماد محددة النطاق&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
المستهلك يطلب نطاقًا واحدًا أو عنصر قبو واحدًا. لا يحصل على إمكانية تعداد القبو بالكامل.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;لا أسرار على قرص المستهلك افتراضيًا&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
مع &lt;code&gt;aac run&lt;/code&gt;، تُمرر الأسرار كمتغيرات بيئة إلى عملية فرعية. لا تُكتب إلى ملف، ولا تظهر في stdout، ولا تُسجل في shell history إذا لم تطبعها أنت.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ما لا يحميك منه Agent Access:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;عملية مستهلك مخترقة. إذا كانت العملية التي استلمت السر ضارة، يمكنها تسريبه.&lt;/li&gt;
&lt;li&gt;مزود مخترق. إذا كان القبو نفسه مخترقًا، هذه الطبقة لا تكفي.&lt;/li&gt;
&lt;li&gt;لصق الأسرار يدويًا في نافذة LLM. البروتوكول لا يستطيع حمايتك إذا نسخت المفتاح إلى المحادثة.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  نمط CI عملي: الوكيل يكتب، Apidog يختبر
&lt;/h2&gt;

&lt;p&gt;نمط العمل المفيد لمعظم الفرق:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;الوكيل يكتب الكود&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Claude Code أو Codex أو Cursor يفتح PR يضيف استدعاء API أو يغير عقدًا.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CI يشغل الاختبارات&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
runner يستخدم &lt;code&gt;aac run&lt;/code&gt; لجلب مفتاح API محدد النطاق وتشغيل اختبارات التكامل.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Apidog يتحقق من العقد&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; يشغل اختبارات OpenAPI أو اختبارات العقد كخطوة منفصلة في CI، أيضًا عبر &lt;code&gt;aac run&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;مثال مبسط:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac run &lt;span class="nt"&gt;--domain&lt;/span&gt; staging-api.example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;API_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;password &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; npm run &lt;span class="nb"&gt;test&lt;/span&gt;:contract
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;النتيجة:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;الوكيل يشحن الكود.&lt;/li&gt;
&lt;li&gt;اختبارات API تتحقق من العقد.&lt;/li&gt;
&lt;li&gt;السر لا يظهر في سياق النموذج.&lt;/li&gt;
&lt;li&gt;المفتاح لا يُحفظ في المستودع.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;للتوسع في هذا النمط، راجع &lt;a href="http://apidog.com/blog/how-to-test-ai-agents-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;كيفية اختبار وكلاء الذكاء الاصطناعي الذين يستدعون واجهات برمجة التطبيقات الخاصة بك&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  القيود والتحذيرات
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;المشروع في معاينة مبكرة&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
واجهات API والبروتوكول قابلة للتغيير. لا تبنِ سير عمل إنتاجيًا حساسًا بدون توقع تغييرات لاحقة.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;يعتمد افتراضيًا على Bitwarden CLI&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
ثبّت &lt;a href="https://bitwarden.com/help/cli/" rel="noopener noreferrer"&gt;Bitwarden CLI&lt;/a&gt; إذا أردت استخدام قبو Bitwarden. للتجارب، استخدم &lt;code&gt;--provider example&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;لا يوجد ملف إعداد ثابت حتى الآن&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
يتم التحكم في السلوك عبر flags، لذلك يفضل تغليف الاستدعاءات المتكررة داخل سكريبتات.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;لا تطبع الأسرار&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
حتى مع &lt;code&gt;aac run&lt;/code&gt;، يمكن لسكريبتك أن يطبع المتغيرات بالخطأ. تجنب &lt;code&gt;set -x&lt;/code&gt; في سكريبتات تحتوي على أسرار.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;لا تلصق الأسرار في Prompts&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
إذا وضعت المفتاح يدويًا في محادثة LLM، فلن ينقذك أي بروتوكول.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  أسئلة شائعة
&lt;/h2&gt;

&lt;h3&gt;
  
  
  هل Agent Access مجاني؟
&lt;/h3&gt;

&lt;p&gt;نعم. CLI وSDKs والبروتوكول مفتوحة المصدر ضمن منظمة Bitwarden على GitHub. إذا استخدمت Bitwarden كقبو، فتنطبق عليك شروط وتسعير Bitwarden نفسه.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل يعمل مع مديري كلمات مرور غير Bitwarden؟
&lt;/h3&gt;

&lt;p&gt;البروتوكول مصمم ليكون محايدًا للموردين. التطبيق المرجعي يدعم Bitwarden ومزودًا تجريبيًا. يمكن لموردين آخرين إضافة مزوداتهم لاحقًا.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل يمكن استخدامه بدون مدير كلمات مرور؟
&lt;/h3&gt;

&lt;p&gt;للاختبار نعم:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac connect &lt;span class="nt"&gt;--provider&lt;/span&gt; example &lt;span class="nt"&gt;--domain&lt;/span&gt; test.com &lt;span class="nt"&gt;--output&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;للإنتاج، تحتاج إلى مزود حقيقي مثل Bitwarden.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل يحتاج المستهلك إلى الشبكة؟
&lt;/h3&gt;

&lt;p&gt;نعم. المستهلك يحتاج إلى الوصول إلى مستمع المزود. إذا كان الاثنان على نفس الجهاز، يمكن استخدام إعداد محلي.&lt;/p&gt;

&lt;h3&gt;
  
  
  كيف يختلف عن ملف &lt;code&gt;.env&lt;/code&gt;؟
&lt;/h3&gt;

&lt;p&gt;ملف &lt;code&gt;.env&lt;/code&gt; موجود على القرص، ويمكن إيداعه بالخطأ في المستودع، ويمكن لأي أمر يشغله الوكيل قراءته. أما &lt;code&gt;aac run&lt;/code&gt; فيحقن السر في ذاكرة عملية فرعية فقط، ويختفي عند خروج العملية.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل يحل محل HashiCorp Vault أو AWS Secrets Manager؟
&lt;/h3&gt;

&lt;p&gt;لا. الخزائن المؤسسية ما زالت مناسبة للأسرار بين الخدمات وعلى نطاق واسع. Agent Access يعالج فجوة مختلفة: أجهزة المطورين، وكلاء AI، ومشغلات CI التي تحتاج إلى سر محدد في وقت التشغيل.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل ستدمجه Anthropic أو OpenAI مباشرة؟
&lt;/h3&gt;

&lt;p&gt;لم يُعلن عن دعم مباشر. نموذج التكامل الحالي هو تغليف أوامرك وسكريبتاتك باستخدام &lt;code&gt;aac run&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  أين أبلغ عن الأخطاء أو أساهم؟
&lt;/h3&gt;

&lt;p&gt;استخدم &lt;a href="https://github.com/bitwarden/agent-access" rel="noopener noreferrer"&gt;مستودع GitHub&lt;/a&gt;. المشكلات، طلبات السحب، ومناقشات البروتوكول تتم هناك.&lt;/p&gt;

&lt;h2&gt;
  
  
  جرّبه الآن
&lt;/h2&gt;

&lt;p&gt;ابدأ بأصغر حلقة ممكنة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac listen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ثم من طرفية أخرى:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac connect &lt;span class="nt"&gt;--provider&lt;/span&gt; example &lt;span class="nt"&gt;--domain&lt;/span&gt; test.com &lt;span class="nt"&gt;--output&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;بعد التأكد من عودة JSON، انتقل إلى Bitwarden CLI، ثم غلّف سكريبتًا حقيقيًا:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aac run &lt;span class="nt"&gt;--domain&lt;/span&gt; api.example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--env&lt;/span&gt; &lt;span class="nv"&gt;API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;password &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--&lt;/span&gt; ./run-tests.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;استخدم Agent Access لحماية الأسرار، و&lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; لاختبار واجهات API والعقود. بهذه البنية: القبو يحتفظ بالسر، Apidog يتحقق من API، والوكيل يكتب الكود بدون أن يرى بيانات الاعتماد.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>أفضل 7 أدوات لإدارة واجهات برمجة التطبيقات API في 2026، مصنفة حسب G2</title>
      <dc:creator>Yusuf Khalidd</dc:creator>
      <pubDate>Fri, 15 May 2026 07:39:45 +0000</pubDate>
      <link>https://forem.com/yusuf_khalidd/fdl-7-dwt-ldr-wjht-brmj-lttbyqt-api-fy-2026-msnf-hsb-g2-619</link>
      <guid>https://forem.com/yusuf_khalidd/fdl-7-dwt-ldr-wjht-brmj-lttbyqt-api-fy-2026-msnf-hsb-g2-619</guid>
      <description>&lt;p&gt;لقد صدرت شبكة G2 للربيع 2026 لإدارة واجهات برمجة التطبيقات (API Management). تضم قائدين: Apidog و viaSocket، وثلاثة أصحاب أداء عالٍ: Traefik Labs و Rasayel و Backendless، واثنين من اللاعبين المتخصصين: Moesif/WSO2 و Thunder Client. لكن التصنيف وحده لا يكفي؛ الأهم هو معرفة أي أداة تناسب جزءًا محددًا من دورة حياة الـ API في مكدسك التقني.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;جرّب Apidog اليوم&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  الخلاصة (TL;DR)
&lt;/h2&gt;

&lt;p&gt;تتصدر &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; و viaSocket شبكة G2 لإدارة واجهات برمجة التطبيقات للربيع 2026.&lt;/p&gt;

&lt;p&gt;استخدم هذا التقسيم السريع قبل الاختيار:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;تحتاج إلى تصميم، اختبار، محاكاة، وتوثيق API في مساحة واحدة؟ اختر Apidog.&lt;/li&gt;
&lt;li&gt;تحتاج إلى ربط أدوات SaaS بدون كود؟ اختر viaSocket.&lt;/li&gt;
&lt;li&gt;تحتاج إلى بوابة API سحابية أصلية مع Kubernetes/GitOps؟ انظر إلى Traefik Labs.&lt;/li&gt;
&lt;li&gt;تحتاج إلى API حول واتساب للأعمال؟ Rasayel مناسبة.&lt;/li&gt;
&lt;li&gt;تريد بناء Backend كامل منخفض الكود؟ Backendless.&lt;/li&gt;
&lt;li&gt;لديك API منشورة وتحتاج إلى تحليلات وتحقيق دخل؟ Moesif.&lt;/li&gt;
&lt;li&gt;تريد اختبار REST داخل VS Code كمطور منفرد؟ Thunder Client.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ما تشير إليه شبكة G2 للربيع 2026
&lt;/h2&gt;

&lt;p&gt;أصدرت &lt;a href="https://company.g2.com/news/g2-spring-2026-reports" rel="noopener noreferrer"&gt;تقارير G2 للربيع 2026&lt;/a&gt; 27,019 تقريرًا في 17 مارس 2026، بزيادة ربع سنوية قدرها 1.72%. وفقًا لـ G2، تحصل نسبة صغيرة فقط من المنتجات على شارة "القائد"، لذلك يمكن اعتبارها إشارة مفيدة، لكنها ليست بديلًا عن تقييم المتطلبات التقنية.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimg_v3_0211n_0f7184c1-600e-4205-bea9-300670abd06g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimg_v3_0211n_0f7184c1-600e-4205-bea9-300670abd06g.jpg" alt="" width="800" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;تعتمد الشبكة على محورين:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;رضا العملاء&lt;/strong&gt;: مستند إلى المراجعات.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;وجود السوق&lt;/strong&gt;: الحجم، الانتشار، وحجم المراجعات.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;في فئة &lt;a href="https://www.g2.com/categories/api-management" rel="noopener noreferrer"&gt;إدارة واجهات برمجة التطبيقات للربيع 2026&lt;/a&gt;، تظهر Apidog و viaSocket كـ "قادة". وتظهر Traefik Labs و Rasayel و Backendless كـ "أصحاب أداء عالٍ". أما Moesif، وهي الآن شركة تابعة لـ WSO2، و Thunder Client فتقعان في فئة "متخصصة".&lt;/p&gt;

&lt;p&gt;الربع مهم، لكن الملاءمة أهم. قد تكون أداة "متخصصة" هي الخيار الصحيح إذا كان نطاقها يطابق مشكلتك، وقد تكون أداة "قائدة" غير مناسبة إذا كانت تحل مشكلة مختلفة. إذا أردت تجربة سير عمل التصميم والاختبار أثناء القراءة، يمكنك &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;تنزيل Apidog&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  الأدوات السبع في لمحة
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;الأداة&lt;/th&gt;
&lt;th&gt;ربع G2&lt;/th&gt;
&lt;th&gt;أفضل استخدام&lt;/th&gt;
&lt;th&gt;مفتوح المصدر؟&lt;/th&gt;
&lt;th&gt;نموذج التسعير&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Apidog&lt;/td&gt;
&lt;td&gt;قائد&lt;/td&gt;
&lt;td&gt;تصميم واجهات برمجة التطبيقات، اختبارها، محاكاتها، وتوثيقها في مساحة واحدة&lt;/td&gt;
&lt;td&gt;طبقة مجانية + مدفوعة&lt;/td&gt;
&lt;td&gt;SaaS لكل مستخدم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;viaSocket&lt;/td&gt;
&lt;td&gt;قائد&lt;/td&gt;
&lt;td&gt;أتمتة سير العمل بدون كود مع ربط واجهات برمجة التطبيقات&lt;/td&gt;
&lt;td&gt;لا&lt;/td&gt;
&lt;td&gt;خطة دخول 50 دولار/شهر&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Traefik Labs&lt;/td&gt;
&lt;td&gt;عالي الأداء&lt;/td&gt;
&lt;td&gt;بوابة واجهات برمجة التطبيقات السحابية الأصلية + حوكمة GitOps&lt;/td&gt;
&lt;td&gt;نعم، Proxy OSS&lt;/td&gt;
&lt;td&gt;مفتوح المصدر مجاني، Hub مدفوع&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rasayel&lt;/td&gt;
&lt;td&gt;عالي الأداء&lt;/td&gt;
&lt;td&gt;رسائل واتساب للأعمال + REST API&lt;/td&gt;
&lt;td&gt;لا&lt;/td&gt;
&lt;td&gt;SaaS لكل مقعد&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backendless&lt;/td&gt;
&lt;td&gt;عالي الأداء&lt;/td&gt;
&lt;td&gt;BaaS مع REST و GraphQL تلقائية التوليد&lt;/td&gt;
&lt;td&gt;لا&lt;/td&gt;
&lt;td&gt;طبقة مجانية + مدفوعة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Moesif (WSO2)&lt;/td&gt;
&lt;td&gt;متخصص&lt;/td&gt;
&lt;td&gt;تحليلات واجهات برمجة التطبيقات، المراقبة، وتحقيق الدخل&lt;/td&gt;
&lt;td&gt;لا&lt;/td&gt;
&lt;td&gt;حسب الاستخدام&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thunder Client&lt;/td&gt;
&lt;td&gt;متخصص&lt;/td&gt;
&lt;td&gt;عميل REST داخل VS Code&lt;/td&gt;
&lt;td&gt;لا&lt;/td&gt;
&lt;td&gt;مجاني + ميزات مدفوعة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;المشكلة أن فئة G2 تجمع أدوات مختلفة جدًا: منصات دورة حياة API، أدوات iPaaS، بوابات، تحليلات، وامتدادات IDE. لذلك لا تقارن الأدوات كأنها بدائل مباشرة دائمًا؛ قارنها حسب المرحلة التي تريد إدارتها.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apidog: الرائد لسير عمل واجهات برمجة التطبيقات الشامل
&lt;/h2&gt;

&lt;p&gt;استحقت Apidog مكانها لأنها تجمع أربع مراحل شائعة في مساحة عمل واحدة:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;تصميم API.&lt;/li&gt;
&lt;li&gt;اختبار API.&lt;/li&gt;
&lt;li&gt;محاكاة API.&lt;/li&gt;
&lt;li&gt;توثيق API.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;بدلًا من كتابة المواصفات في أداة، والاختبارات في أداة أخرى، والتوثيق في مكان ثالث، يمكنك جعل مواصفة OpenAPI هي مصدر الحقيقة المشترك بين الفريق.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-99.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-99.png" alt="" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ما الذي تحصل عليه عمليًا؟
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;تصميم مرئي للـ API&lt;/strong&gt;: محرر OpenAPI 3.0/3.1 يعتمد على المخطط أولًا.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;اختبار آلي&lt;/strong&gt;: بناء سيناريوهات اختبار بصريًا مع إمكانية دمجها في CI/CD.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;محاكاة ذكية&lt;/strong&gt;: استجابات mock يتم توليدها من المخطط.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;توثيق تلقائي&lt;/strong&gt;: نشر وثائق عامة أو خاصة من نفس المصدر.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;تعاون الفريق&lt;/strong&gt;: مزامنة، إصدارات، وأدوار وصول.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  مثال سير عمل عملي
&lt;/h3&gt;

&lt;p&gt;ابدأ من مواصفة OpenAPI بسيطة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;openapi&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;3.1.0&lt;/span&gt;
&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Users API&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1.0.0&lt;/span&gt;
&lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="s"&gt;/users/{id}&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Get user by ID&lt;/span&gt;
      &lt;span class="na"&gt;parameters&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;id&lt;/span&gt;
          &lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;path&lt;/span&gt;
          &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
      &lt;span class="na"&gt;responses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;200"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;User found&lt;/span&gt;
          &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;application/json&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
                &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
                  &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
                    &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;email&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ثم نفّذ الخطوات التالية:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;استورد ملف OpenAPI إلى Apidog.&lt;/li&gt;
&lt;li&gt;راجع المسارات والـ schemas مع الفريق.&lt;/li&gt;
&lt;li&gt;أنشئ mock server ليبدأ فريق الواجهة الأمامية قبل اكتمال التنفيذ.&lt;/li&gt;
&lt;li&gt;أضف اختبارات تحقق من status code و body schema.&lt;/li&gt;
&lt;li&gt;انشر التوثيق من نفس المواصفة.&lt;/li&gt;
&lt;li&gt;اربط الاختبارات مع CI/CD عند الحاجة.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;يناسب Apidog فرق التطوير التي تريد مصدرًا واحدًا للحقيقة لمواصفات API، خصوصًا عندما يعمل مطورو الخلفية، الواجهة الأمامية، وضمان الجودة على نفس الواجهات. يمكنك &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;تنزيل Apidog&lt;/a&gt; واستيراد مجموعة Postman للبدء بسرعة.&lt;/p&gt;

&lt;h2&gt;
  
  
  viaSocket: الرائد لفرق التكامل بدون كود
&lt;/h2&gt;

&lt;p&gt;viaSocket هو القائد الآخر، لكنه لا يحل نفس مشكلة Apidog. إنه أقرب إلى Zapier أو Make من كونه بوابة API تقليدية. الفكرة هي ربط تطبيقات SaaS عبر webhooks، منطق شرطي، واستدعاءات API مخصصة دون بناء تكامل كامل من الصفر.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://viasocket.com" rel="noopener noreferrer"&gt;منصة أتمتة سير عمل تعتمد على الذكاء الاصطناعي&lt;/a&gt; مناسبة عندما تكون المشكلة في ربط الأدوات لا في تصميم API نفسها.&lt;/p&gt;

&lt;h3&gt;
  
  
  استخدم viaSocket عندما:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;تريد ربط CRM بأداة بريد أو نظام دعم.&lt;/li&gt;
&lt;li&gt;تحتاج إلى webhook يعالج حدثًا ويرسله إلى تطبيق آخر.&lt;/li&gt;
&lt;li&gt;يعمل الفريق غير الهندسي على أتمتة العمليات.&lt;/li&gt;
&lt;li&gt;لا تريد بناء خدمة وسيطة لكل تكامل بسيط.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  لا تستخدمه كبديل عن:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;بوابة API.&lt;/li&gt;
&lt;li&gt;اختبار العقود.&lt;/li&gt;
&lt;li&gt;إدارة دورة حياة OpenAPI.&lt;/li&gt;
&lt;li&gt;تحديد المعدلات أو سياسات OAuth/JWT.&lt;/li&gt;
&lt;li&gt;إدارة خدمات مصغرة داخلية.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;إذا كانت مشكلتك هي أتمتة SaaS، viaSocket مناسب. إذا كانت مشكلتك هي بناء API ونشرها واختبارها وتوثيقها، فابحث في أدوات دورة الحياة أو البوابات.&lt;/p&gt;

&lt;h2&gt;
  
  
  Traefik Labs: بوابة مفتوحة المصدر مع إدارة واجهات برمجة التطبيقات
&lt;/h2&gt;

&lt;p&gt;Traefik Proxy معروف كوكيل سحابي مفتوح المصدر. أما &lt;a href="https://traefik.io/traefik-hub" rel="noopener noreferrer"&gt;Traefik Hub&lt;/a&gt; فهو الطبقة التجارية التي تضيف قدرات إدارة API مثل بوابات المطورين، عناصر التحكم في دورة الحياة، وحوكمة GitOps.&lt;/p&gt;

&lt;h3&gt;
  
  
  أين يلمع Traefik؟
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes Ingress.&lt;/li&gt;
&lt;li&gt;اكتشاف الخدمات.&lt;/li&gt;
&lt;li&gt;التكوين الديناميكي.&lt;/li&gt;
&lt;li&gt;شهادات Let's Encrypt التلقائية.&lt;/li&gt;
&lt;li&gt;إدارة المسارات والسياسات عبر GitOps.&lt;/li&gt;
&lt;li&gt;تشغيله عند حافة النظام كبوابة أو reverse proxy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  مثال ذهني للبنية
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client
  |
  v
Traefik Gateway
  |
  +--&amp;gt; users-service
  +--&amp;gt; billing-service
  +--&amp;gt; notifications-service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;في هذا السيناريو، Traefik يقرر التوجيه والسياسات، بينما تحتاج أداة أخرى لتصميم العقود واختبارها. لذلك قد تستخدم Traefik كبوابة، و&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; أعلى منه للتصميم والاختبار والتوثيق.&lt;/p&gt;

&lt;p&gt;اقرأ أيضًا: &lt;a href="http://apidog.com/blog/open-source-api-management-tools?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;أدوات إدارة واجهات برمجة التطبيقات مفتوحة المصدر&lt;/a&gt; و&lt;a href="http://apidog.com/blog/top-api-management-tools-for-enterprise?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;أفضل منصات إدارة واجهات برمجة التطبيقات للفرق المؤسسية&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rasayel: منصة واتساب للأعمال API مع نطاق واضح
&lt;/h2&gt;

&lt;p&gt;Rasayel في جوهرها منصة واتساب للأعمال مع صندوق بريد للفريق، روبوتات دردشة، ورسائل جماعية. وجودها في فئة API Management يعود إلى &lt;a href="https://rest.developers.rasayel.io" rel="noopener noreferrer"&gt;واجهات REST و GraphQL&lt;/a&gt;، وإدارة مفاتيح API، والـ webhooks.&lt;/p&gt;

&lt;h3&gt;
  
  
  اختر Rasayel إذا كنت:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;تدير دعم العملاء أو المبيعات على واتساب.&lt;/li&gt;
&lt;li&gt;تحتاج إلى صندوق بريد مشترك للفريق.&lt;/li&gt;
&lt;li&gt;تريد ربط واتساب بـ HubSpot أو Pipedrive.&lt;/li&gt;
&lt;li&gt;تحتاج إلى webhooks وأتمتة حول محادثات واتساب.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  تخطَّ Rasayel إذا كنت:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;تدير خدمات مصغرة داخلية.&lt;/li&gt;
&lt;li&gt;تحتاج إلى API Gateway عامة.&lt;/li&gt;
&lt;li&gt;لا تستخدم واتساب في سير عملك.&lt;/li&gt;
&lt;li&gt;تبحث عن منصة تصميم واختبار API عامة.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rasayel ليست منصة API عامة لكل فريق، لكنها مناسبة جدًا إذا كان واتساب هو قناة التشغيل الأساسية.&lt;/p&gt;

&lt;h2&gt;
  
  
  Backendless: BaaS مع واجهات REST و GraphQL تلقائية التوليد
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://backendless.com/feature/service-management/" rel="noopener noreferrer"&gt;Backendless&lt;/a&gt; هي منصة Backend-as-a-Service تولد نقاط نهاية REST و GraphQL من نموذج البيانات والخدمات التي تعرفها داخل المنصة.&lt;/p&gt;

&lt;p&gt;الفكرة العملية:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;تعرّف جدولًا أو نموذج بيانات.&lt;/li&gt;
&lt;li&gt;تحصل على API تلقائية.&lt;/li&gt;
&lt;li&gt;تضبط الأدوار والصلاحيات.&lt;/li&gt;
&lt;li&gt;تستخدم SDKs أو REST/GraphQL من تطبيقك.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  نقاط القوة
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;بناء Backend منخفض الكود.&lt;/li&gt;
&lt;li&gt;SDKs لأنظمة Android و iOS و JavaScript و .NET.&lt;/li&gt;
&lt;li&gt;صلاحيات على مستوى العمليات.&lt;/li&gt;
&lt;li&gt;تتبع استدعاءات الخدمات.&lt;/li&gt;
&lt;li&gt;مناسب للنماذج الأولية والتطبيقات الصغيرة والمتوسطة.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  متى لا يكون الخيار المناسب؟
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;لديك Backend قائم بالفعل وتحتاج فقط إلى بوابة أمامه.&lt;/li&gt;
&lt;li&gt;تريد تصميم API بالعقد أولًا قبل نموذج البيانات.&lt;/li&gt;
&lt;li&gt;تريد تجنب الارتباط بمنصة BaaS.&lt;/li&gt;
&lt;li&gt;تحتاج إلى بنية داخلية مخصصة جدًا.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;استخدم Backendless عندما تريد تقليل بناء الواجهة الخلفية نفسها، لا عندما تريد إدارة واجهات قائمة بالفعل.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moesif (شركة تابعة لـ WSO2): تحليلات واجهات برمجة التطبيقات وتحقيق الدخل
&lt;/h2&gt;

&lt;p&gt;Moesif أداة متخصصة في تحليلات API، المراقبة، وتحقيق الدخل. &lt;a href="https://wso2.com/library/blogs/wso2-acquires-api-analytics-and-monetization-leader-moesif/" rel="noopener noreferrer"&gt;استحوذت WSO2 على Moesif في مايو 2025&lt;/a&gt; وتقوم بدمجها كطبقة تحليلية لمنصة Choreo، مع استمرار Moesif ككيان مستقل.&lt;/p&gt;

&lt;h3&gt;
  
  
  ما الذي تفعله Moesif؟
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;تحليل استخدام API حسب المستخدم.&lt;/li&gt;
&lt;li&gt;تحليل الاستدعاءات حسب endpoint.&lt;/li&gt;
&lt;li&gt;كشف أنماط الاستخدام غير الطبيعية.&lt;/li&gt;
&lt;li&gt;دعم نماذج تسعير مبنية على الاستخدام.&lt;/li&gt;
&lt;li&gt;لوحات تحكم للعملاء والمطورين.&lt;/li&gt;
&lt;li&gt;تحليلات الاحتفاظ والمسارات لمستهلكي API.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  مثال قرار
&lt;/h3&gt;

&lt;p&gt;استخدم Moesif إذا كان لديك سؤال مثل:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;أي عميل يستهلك أكثر endpoints؟
ما هي أكثر الأخطاء شيوعًا لكل خطة؟
هل يمكننا فوترة العملاء حسب عدد الاستدعاءات؟
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;لا تستخدم Moesif كبديل عن البوابة أو أداة التصميم. هي طبقة مراقبة وتحليلات فوق API موجودة بالفعل.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thunder Client: إضافة عميل REST لـ VS Code
&lt;/h2&gt;

&lt;p&gt;Thunder Client هو امتداد لـ VS Code لإرسال طلبات HTTP من داخل المحرر. يشبه Postman أو Insomnia، لكنه أخف ومباشر للمطور الفردي.&lt;/p&gt;

&lt;h3&gt;
  
  
  جيد في:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;اختبار REST دون مغادرة VS Code.&lt;/li&gt;
&lt;li&gt;حفظ المجموعات كـ JSON داخل المستودع.&lt;/li&gt;
&lt;li&gt;استخدام متغيرات بيئة.&lt;/li&gt;
&lt;li&gt;كتابة اختبارات وتأكيدات بسيطة.&lt;/li&gt;
&lt;li&gt;تشغيل طلبات سريعة أثناء التطوير.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ليس مناسبًا لـ:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;تعاون فرق كبير.&lt;/li&gt;
&lt;li&gt;تصميم API بالعقد أولًا.&lt;/li&gt;
&lt;li&gt;توليد وثائق.&lt;/li&gt;
&lt;li&gt;تشغيل mock server شامل.&lt;/li&gt;
&lt;li&gt;إدارة دورة حياة API كاملة.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;راجع أيضًا: &lt;a href="http://apidog.com/blog/thunder-client-team-collaboration-limitations?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Thunder Client للفرق: قيود التعاون&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;إذا كانت "إدارة API" لديك تعني اختبار endpoint أثناء كتابة الكود، Thunder Client كافٍ. إذا احتجت إلى تصميم، محاكاة، توثيق، وتعاون، فستحتاج إلى منصة أوسع مثل Apidog.&lt;/p&gt;

&lt;h2&gt;
  
  
  كيف تختار الأداة المناسبة لفريقك؟
&lt;/h2&gt;

&lt;p&gt;ابدأ بالسؤال الصحيح: ما الجزء الذي تريد إدارته من دورة حياة API؟&lt;/p&gt;

&lt;h3&gt;
  
  
  1. حدّد المشكلة الأساسية
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;المشكلة&lt;/th&gt;
&lt;th&gt;الأداة الأقرب&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;تصميم، اختبار، محاكاة، وتوثيق&lt;/td&gt;
&lt;td&gt;Apidog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ربط SaaS و webhooks بدون كود&lt;/td&gt;
&lt;td&gt;viaSocket&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;بوابة API، routing، policies&lt;/td&gt;
&lt;td&gt;Traefik&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;واتساب للأعمال مع API&lt;/td&gt;
&lt;td&gt;Rasayel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;بناء Backend منخفض الكود&lt;/td&gt;
&lt;td&gt;Backendless&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;تحليلات واستخدام وفوترة&lt;/td&gt;
&lt;td&gt;Moesif&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;اختبار REST داخل VS Code&lt;/td&gt;
&lt;td&gt;Thunder Client&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  2. قيّم حجم الفريق
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;مطور منفرد&lt;/strong&gt;: Thunder Client أو الطبقة المجانية من Apidog.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;فريق 5–50 شخصًا&lt;/strong&gt;: Apidog للتصميم والاختبار، أو Backendless إذا كنت تبني Backend كاملًا.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;فريق يستخدم Kubernetes&lt;/strong&gt;: Traefik كبوابة، مع أداة تصميم واختبار منفصلة.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;شركة لديها API عامة&lt;/strong&gt;: بوابة + Moesif للتحليلات + Apidog للعقود والاختبارات.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. حدّد القيد الرئيسي
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;المال&lt;/strong&gt;: الطبقة المجانية من Apidog، Traefik Proxy OSS، وخطط مجانية/دخولية عند الحاجة.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;الوقت&lt;/strong&gt;: Apidog لتقليل تبديل الأدوات، و viaSocket لتكاملات SaaS السريعة.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;الحوكمة&lt;/strong&gt;: Traefik Hub للـ GitOps، Apidog لمراجعة التصميم، Moesif لتحليلات الاستخدام.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;للمزيد، اقرأ &lt;a href="http://apidog.com/blog/api-testing-tool-team-50-engineers?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;أداة اختبار واجهات برمجة التطبيقات لفريق من 50 مهندسًا&lt;/a&gt; و&lt;a href="http://apidog.com/blog/api-platform-design-first-api-workflow?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;منصة واجهة برمجة التطبيقات التي تعتمد على التصميم أولًا&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ماذا تعلمك شبكة G2 للربيع 2026؟
&lt;/h2&gt;

&lt;p&gt;الأدوات السبع في شبكة G2 لإدارة واجهات برمجة التطبيقات للربيع 2026 ليست بدائل مباشرة لبعضها دائمًا. كل أداة تحل طبقة مختلفة من المشكلة.&lt;/p&gt;

&lt;p&gt;النقاط الرئيسية:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apidog و viaSocket قائدان، لكنهما يحلان مشكلتين مختلفتين.&lt;/li&gt;
&lt;li&gt;Traefik مناسب للبوابات، وليس للتصميم والاختبار.&lt;/li&gt;
&lt;li&gt;Rasayel ممتاز إذا كان واتساب جزءًا أساسيًا من سير العمل.&lt;/li&gt;
&lt;li&gt;Backendless مناسب عندما تريد إنشاء Backend بدلًا من إدارته فقط.&lt;/li&gt;
&lt;li&gt;Moesif طبقة تحليلات وتحقيق دخل، لا بوابة.&lt;/li&gt;
&lt;li&gt;Thunder Client أداة اختبار فردية داخل VS Code، لا منصة دورة حياة API كاملة.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;إذا كان فريقك يتعامل يوميًا مع التصميم، الاختبار، المحاكاة، والتوثيق، فابدأ بـ &lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;. وإذا كنت تحتاج إلى جانب البوابة في المكدس، راجع &lt;a href="http://apidog.com/blog/best-api-gateways?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;أفضل 10 بوابات واجهات برمجة تطبيقات للمطورين في عام 2026&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>كيفية استخدام واجهة برمجة تطبيقات ERNIE 5.1؟</title>
      <dc:creator>Yusuf Khalidd</dc:creator>
      <pubDate>Thu, 14 May 2026 08:38:47 +0000</pubDate>
      <link>https://forem.com/yusuf_khalidd/kyfy-stkhdm-wjh-brmj-ttbyqt-ernie-51-4dcb</link>
      <guid>https://forem.com/yusuf_khalidd/kyfy-stkhdm-wjh-brmj-ttbyqt-ernie-51-4dcb</guid>
      <description>&lt;p&gt;تم إطلاق &lt;a href="https://ernie.baidu.com/blog/posts/ernie-5.1-0508-release/" rel="noopener noreferrer"&gt;ERNIE 5.1&lt;/a&gt; في 9 مايو 2026، وبعد أسبوع أصبح متاحًا عبر Qianfan API. إذا كنت تريد استدعاء النموذج من الكود، أو تشغيل tool calling، أو بناء agent loop واختبارها عبر &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;، فهذا الدليل يركز على التنفيذ: إنشاء المفتاح، إرسال الطلبات، التدفّق، الأدوات، ومعالجة الأخطاء.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;جرّب Apidog اليوم&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;بنهاية المقال سيكون لديك أمثلة جاهزة لـ &lt;code&gt;curl&lt;/code&gt; وPython وNode.js، بالإضافة إلى طريقة تنظيم الطلبات داخل Apidog لاختبار ERNIE 5.1 مقابل مزودين آخرين.&lt;/p&gt;

&lt;p&gt;إذا لم تقرأ بعد &lt;a href="http://apidog.com/blog/what-is-ernie-5-1?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;شرح إطلاق ERNIE 5.1&lt;/a&gt;، فابدأ به سريعًا؛ فهو يغطي المعايير والمقارنات مع &lt;a href="http://apidog.com/blog/what-is-deepseek-v4?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;DeepSeek V4&lt;/a&gt; و&lt;a href="http://apidog.com/blog/what-is-kimi-k2-6?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K2.6&lt;/a&gt;. هذا المقال هو جزء التنفيذ العملي.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-83.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-83.png" alt="" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  الخطوة 1: الحصول على مفتاح API لـ Qianfan
&lt;/h2&gt;

&lt;p&gt;يتم تقديم &lt;a href="http://apidog.com/blog/what-is-ernie-5-1/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ERNIE 5.1&lt;/a&gt; عبر منصة Qianfan من Baidu Intelligent Cloud. لا يوجد API منفصل خاص بـ ERNIE؛ كل الاستدعاءات تمر عبر Qianfan.&lt;/p&gt;

&lt;p&gt;نفّذ الخطوات التالية:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;انتقل إلى &lt;a href="https://cloud.baidu.com" rel="noopener noreferrer"&gt;cloud.baidu.com&lt;/a&gt; وأنشئ حسابًا في Baidu Intelligent Cloud أو سجّل الدخول.

&lt;ul&gt;
&lt;li&gt;يمكن للمطورين الدوليين التسجيل بالبريد الإلكتروني.&lt;/li&gt;
&lt;li&gt;بعض ميزات المؤسسات قد تتطلب رقم هاتف صيني.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;افتح لوحة Qianfan من &lt;a href="https://console.bce.baidu.com/qianfan/" rel="noopener noreferrer"&gt;console.bce.baidu.com/qianfan&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;من &lt;strong&gt;إدارة مفاتيح API&lt;/strong&gt; (&lt;code&gt;API Key 管理&lt;/code&gt;) اختر &lt;strong&gt;إنشاء مفتاح API&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;اختر مساحة العمل، وامنح المفتاح صلاحية الوصول إلى خدمة chat completions.&lt;/li&gt;
&lt;li&gt;انسخ المفتاح وخزّنه في متغير بيئة، وليس داخل الكود.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;QIANFAN_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"bce-v3/ALTAK-xxxx/xxxx"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;نقطتان مهمتان قبل أول طلب:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;نقطة النهاية v2 تستخدم Bearer token واحدًا. لا تبنِ تطبيقًا جديدًا على تدفق OAuth القديم &lt;code&gt;access_token&lt;/code&gt; الخاص بـ v1.&lt;/li&gt;
&lt;li&gt;ERNIE 5.1 نموذج مدفوع منذ البداية. أضف رصيدًا بسيطًا، مثل 10 ¥، قبل الاختبار.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  الخطوة 2: استدعاء نقطة النهاية المتوافقة مع OpenAI باستخدام curl
&lt;/h2&gt;

&lt;p&gt;يوفر Qianfan نقطة نهاية chat completions متوافقة مع تنسيق OpenAI. إذا كان تطبيقك يستخدم OpenAI SDK أو نفس شكل الطلبات، فغالبًا ستحتاج فقط إلى تغيير:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;base_url&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;model&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;api_key&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;الإعدادات الأساسية:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Base URL: https://qianfan.baidubce.com/v2
Model: ernie-5.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;يمكنك أيضًا استخدام:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ernie-5.1-preview
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;للمزايا ذات الوصول المبكر.&lt;/p&gt;

&lt;p&gt;مثال &lt;code&gt;curl&lt;/code&gt; بسيط:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://qianfan.baidubce.com/v2/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$QIANFAN_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "ernie-5.1",
    "messages": [
      {"role": "system", "content": "You are a senior API designer."},
      {"role": "user", "content": "Sketch a REST schema for a GitHub-style PR review API. Be concise."}
    ],
    "temperature": 0.3
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;شكل الاستجابة سيكون قريبًا من OpenAI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"chatcmpl-..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"chat.completion"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"created"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1746780000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ernie-5.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"choices"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"index"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"assistant"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"finish_reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stop"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prompt_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"completion_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;318&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;360&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;أخطاء شائعة في هذه المرحلة:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;401 Unauthorized&lt;/code&gt;: المفتاح غير صحيح أو منتهي الصلاحية.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;403&lt;/code&gt;: المفتاح صحيح، لكن النموذج غير مفعّل في مساحة العمل. فعّل ERNIE 5.1 من لوحة Qianfan.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  الخطوة 3: استدعاء ERNIE 5.1 من Python
&lt;/h2&gt;

&lt;p&gt;بما أن نقطة النهاية متوافقة مع OpenAI، يمكنك استخدام حزمة &lt;code&gt;openai&lt;/code&gt; الرسمية في Python مع تغيير &lt;code&gt;base_url&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;QIANFAN_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://qianfan.baidubce.com/v2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ernie-5.1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You explain APIs in plain English.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Why would I use server-sent events over WebSockets for a chat UI?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Tokens used: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_tokens&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;إذا كان لديك wrapper داخلي حول OpenAI SDK، فاختبار ERNIE 5.1 غالبًا يكون تغييرًا في سطر الإعداد فقط. نفس النمط يعمل مع &lt;a href="http://apidog.com/blog/how-to-use-deepseek-v4-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;API الخاص بـ DeepSeek&lt;/a&gt; ومعظم مزودي النماذج الذين يدعمون تنسيق OpenAI.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخطوة 4: تفعيل تدفق الرموز لواجهات الدردشة
&lt;/h2&gt;

&lt;p&gt;لواجهات الدردشة، لا تنتظر الاستجابة كاملة. استخدم streaming حتى تعرض الرموز تدريجيًا للمستخدم.&lt;/p&gt;

&lt;p&gt;في Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;stream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ernie-5.1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write a haiku about API versioning.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ولتصحيح الأخطاء باستخدام &lt;code&gt;curl&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://qianfan.baidubce.com/v2/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$QIANFAN_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "ernie-5.1",
    "stream": true,
    "messages": [{"role": "user", "content": "Stream a 3-sentence joke."}]
  }'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--no-buffer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;شكل التدفق مطابق تقريبًا لتنسيق OpenAI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data: {...}
data: {...}
data: [DONE]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  الخطوة 5: استخدام ERNIE 5.1 مع الأدوات
&lt;/h2&gt;

&lt;p&gt;يدعم ERNIE 5.1 نمط tool calling باستخدام نفس شكل function calling المتوافق مع OpenAI. الفكرة العملية:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ترسل قائمة الأدوات المتاحة للنموذج.&lt;/li&gt;
&lt;li&gt;يقرر النموذج هل يحتاج إلى استدعاء أداة.&lt;/li&gt;
&lt;li&gt;ينفذ تطبيقك الأداة فعليًا.&lt;/li&gt;
&lt;li&gt;ترسل نتيجة الأداة مرة أخرى للنموذج.&lt;/li&gt;
&lt;li&gt;تكرر الحلقة حتى تنتهي الاستجابة بدون &lt;code&gt;tool_calls&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;مثال تعريف أداة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;get_weather&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Get current weather for a city.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parameters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;city&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;City name, e.g. Singapore&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;string&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enum&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;celsius&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fahrenheit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
                &lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;city&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ernie-5.1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s the weather in Tokyo right now?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tool_choice&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;auto&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;tool_calls&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_calls&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tool_calls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tool_calls&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Model wants to call: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;(&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;بعد تنفيذ الأداة في تطبيقك، أضف النتيجة كرسالة بدور &lt;code&gt;tool&lt;/code&gt;، ثم استدعِ النموذج مرة أخرى. تنتهي الحلقة عندما:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;finish_reason&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stop&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ولا توجد:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;tool_calls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ملاحظة تنفيذية: قد يعيد ERNIE 5.1 أحيانًا arguments الخاصة بالأداة كسلسلة JSON داخل code fence بدل JSON نظيف. تعامل معها دفاعيًا:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_tool_args&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;JSONDecodeError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;cleaned&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;^```

json|

```$&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MULTILINE&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cleaned&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  الخطوة 6: استدعاء ERNIE 5.1 من Node.js
&lt;/h2&gt;

&lt;p&gt;إذا كنت تستخدم حزمة &lt;code&gt;openai&lt;/code&gt; في Node.js، غيّر &lt;code&gt;baseURL&lt;/code&gt; فقط:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;OpenAI&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;QIANFAN_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://qianfan.baidubce.com/v2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;completion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ernie-5.1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Return a JSON object with 3 API design tips.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;response_format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;json_object&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;response_format: { type: "json_object" }&lt;/code&gt; يعمل للاستخدامات العملية. أما &lt;code&gt;json_schema&lt;/code&gt; الصارم فما زال قيد الطرح في Qianfan؛ لذلك تحقّق من شكل الاستجابة في الكود بدل الاعتماد الكامل على القيود.&lt;/p&gt;

&lt;p&gt;مثال تحقق بسيط:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;completion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;parsed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tips&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Expected tips to be an array&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Invalid JSON response:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  الخطوة 7: الاختبار والمقارنة باستخدام Apidog
&lt;/h2&gt;

&lt;p&gt;إذا كنت تقارن ERNIE 5.1 مع DeepSeek V4 أو Kimi K2.6، لا تجعل المقارنة تعتمد على أوامر متفرقة في الطرفية. استخدم &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; لإنشاء مشروع واحد، وبيئات منفصلة، وطلبات متطابقة لكل مزود.&lt;/p&gt;

&lt;p&gt;إعداد سريع:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;افتح Apidog.&lt;/li&gt;
&lt;li&gt;أنشئ مشروعًا جديدًا باسم &lt;code&gt;LLM bake-off&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-81.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-81.png" alt="" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;أضف بيئة تحتوي على المتغيرات التالية:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;QIANFAN_API_KEY
DEEPSEEK_API_KEY
MOONSHOT_API_KEY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-82.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-82.png" alt="" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;أنشئ طلبًا لكل مزود.&lt;/li&gt;
&lt;li&gt;استخدم نفس مصفوفة &lt;code&gt;messages&lt;/code&gt; في كل الطلبات.&lt;/li&gt;
&lt;li&gt;غيّر فقط &lt;code&gt;base_url&lt;/code&gt; و&lt;code&gt;model&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;مثال للنماذج:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ernie-5.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Design a REST API for pull request reviews. Return endpoints and payload examples."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"temperature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;استخدم ميزة Run في Apidog لتشغيل الطلبات بالتوازي ومقارنة النتائج. يحتفظ &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; بسجل الطلبات حسب البيئة، ما يجعل إعادة نفس التقييم لاحقًا أسهل من تشغيل عدة أوامر &lt;code&gt;curl&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;لمزيد من الاختبارات متعددة المزودين، راجع &lt;a href="http://apidog.com/blog/test-local-llms-as-apis?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;اختبار نماذج LLM المحلية كواجهات برمجة تطبيقات&lt;/a&gt; ودليل &lt;a href="http://apidog.com/blog/how-to-use-glm-5-1-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;GLM 5.1 API&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  التسعير، حدود المعدل، والحصص
&lt;/h2&gt;

&lt;p&gt;لم يكن تسعير Qianfan العام لـ ERNIE 5.1 مذكورًا في منشور الإصدار. تحقق من بطاقة الأسعار داخل لوحة Qianfan قبل مشاركة أرقام داخلية مع فريقك.&lt;/p&gt;

&lt;p&gt;نصائح عملية:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;حدود المعدل مرتبطة بمساحة العمل.&lt;/strong&gt; الحسابات الجديدة تبدأ غالبًا بحد QPS منخفض. ارفع الحد من لوحة التحكم بعد الاختبار.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;استخدم حقل &lt;code&gt;usage&lt;/code&gt;.&lt;/strong&gt; كل استجابة تحتوي على:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;prompt_tokens&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;completion_tokens&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;total_tokens&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;سجّل الاستخدام لكل طلب.&lt;/strong&gt; لا تعتمد فقط على لوحة التحكم لتقدير التكلفة.&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;لا يوجد prompt caching تلقائي.&lt;/strong&gt; إذا كان لديك system prompt طويل، فسيتم احتسابه في كل استدعاء. اختصره أو خزّن النتائج في طبقة التطبيق عند الإمكان.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;مثال تسجيل بسيط:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ernie-5.1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;usage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;usage&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt_tokens&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prompt_tokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;completion_tokens&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completion_tokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_tokens&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total_tokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  معالجة الأخطاء التي ستواجهها غالبًا
&lt;/h2&gt;

&lt;p&gt;الأخطاء العملية الأكثر شيوعًا:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;الحالة&lt;/th&gt;
&lt;th&gt;المعنى&lt;/th&gt;
&lt;th&gt;الإصلاح&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;401&lt;/td&gt;
&lt;td&gt;رمز Bearer خاطئ أو منتهي الصلاحية&lt;/td&gt;
&lt;td&gt;أعد توليد المفتاح من لوحة التحكم&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;403&lt;/td&gt;
&lt;td&gt;النموذج غير مفعّل في مساحة العمل&lt;/td&gt;
&lt;td&gt;فعّل ERNIE 5.1 من لوحة Qianfan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;429&lt;/td&gt;
&lt;td&gt;تم تجاوز حد المعدل&lt;/td&gt;
&lt;td&gt;استخدم backoff مع jitter ثم أعد المحاولة&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;400 (&lt;code&gt;invalid messages&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;ترتيب أدوار الرسائل غير صحيح&lt;/td&gt;
&lt;td&gt;راجع تسلسل user/assistant/tool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;500/502&lt;/td&gt;
&lt;td&gt;مشكلة من جهة Qianfan&lt;/td&gt;
&lt;td&gt;أعد المحاولة مرة، ثم تحقق من حالة الخدمة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;للاستخدام الإنتاجي، غلّف كل استدعاء بإعادة محاولة مع exponential backoff، وسجّل &lt;code&gt;request_id&lt;/code&gt; من رؤوس الاستجابة إذا كان متاحًا؛ ستحتاجه عند التواصل مع دعم Baidu.&lt;/p&gt;

&lt;h2&gt;
  
  
  غلاف Python بسيط مناسب كبداية إنتاجية
&lt;/h2&gt;

&lt;p&gt;هذا wrapper يغطي السيناريوهات الأساسية: استدعاء chat completions مع إعادة محاولة عند حدود المعدل أو أخطاء الخادم.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;RateLimitError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;APIError&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;QIANFAN_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://qianfan.baidubce.com/v2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ernie-5.1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_retries&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_retries&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;RateLimitError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;sleep_for&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sleep_for&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;APIError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;max_retries&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;continue&lt;/span&gt;
            &lt;span class="k"&gt;raise&lt;/span&gt;

    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ERNIE 5.1 retries exhausted&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;استخدامه:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;messages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a concise API reviewer.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Review this endpoint design: POST /users/search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;للتدفق وtool calling، ابنِ فوق هذا الغلاف بدل تكرار منطق retry في كل مكان.&lt;/p&gt;

&lt;h2&gt;
  
  
  الأسئلة الشائعة
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;هل ERNIE 5.1 API مجاني؟&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;لا. Qianfan يعمل بنظام الدفع حسب الاستخدام. لا توجد طبقة مجانية دائمة، لكن الحسابات الجديدة قد تحصل أحيانًا على أرصدة تجريبية. للتجربة المجانية عبر واجهة دردشة، استخدم &lt;a href="https://ernie.baidu.com" rel="noopener noreferrer"&gt;ernie.baidu.com&lt;/a&gt; أو راجع &lt;a href="http://apidog.com/blog/free-llm-openclaw-web-search?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;خيارات LLM المجانية&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;هل يمكن تشغيل ERNIE 5.1 محليًا؟&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;لا. لا توجد أوزان عامة متاحة. إذا كان التشغيل المحلي أو on-prem مطلبًا أساسيًا، راجع &lt;a href="http://apidog.com/blog/how-to-run-deepseek-v4-locally?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;كيفية تشغيل DeepSeek V4 محليًا&lt;/a&gt; أو &lt;a href="http://apidog.com/blog/best-local-llms-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;أفضل نماذج LLM المحلية في عام 2026&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;هل يعمل OpenAI SDK بدون تغييرات كبيرة؟&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;نعم. اضبط:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://qianfan.baidubce.com/v2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;واستخدم مفتاح Qianfan في &lt;code&gt;api_key&lt;/code&gt;. حقل &lt;code&gt;model&lt;/code&gt; يجب أن يحتوي على معرف نموذج Qianfan مثل:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ernie-5.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;وليس معرفًا من OpenAI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;هل يدعم ERNIE 5.1 streaming وtool calling؟&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;نعم. يعمل streaming عبر &lt;code&gt;stream: true&lt;/code&gt;، وتعمل الأدوات باستخدام مخطط function calling المتوافق مع OpenAI. أما &lt;code&gt;response_format: json_object&lt;/code&gt; فهو مدعوم، بينما &lt;code&gt;json_schema&lt;/code&gt; الصارم ما زال قيد الطرح.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;كيف يتعامل ERNIE 5.1 مع العربية أو الإنجليزية أو الصينية؟&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;المقال الأصلي يركز على المقارنة بين الصينية والإنجليزية، ويشير إلى أن كلاهما من نقاط قوة النموذج. للمهام التقنية باللغة الإنجليزية مثل الكود وتصميم APIs، يمكن اختباره كنموذج منافس. للكتابة الإبداعية باللغة الصينية، يقدم أداءً قويًا بين النماذج الصينية.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ما الحد الأقصى لطول المخرجات؟&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;لم يُنشر رسميًا. عمليًا، قد تصل استجابات الدور الواحد إلى حوالي 8 آلاف رمز قبل أن ينهي النموذج. للتوليد الطويل، قسّم المهمة إلى أجزاء واستخدم رسائل متابعة.&lt;/p&gt;

&lt;p&gt;إذا كنت تبني agent أو طبقة API فوق ERNIE 5.1، يمكنك &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;تحميل Apidog&lt;/a&gt; واستخدام طلبات متوافقة مع OpenAI لاختبار وتوثيق نقطة نهاية Qianfan بجانب بقية خدماتك.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>ما هو ERNIE 5.1؟ نموذج MoE الجديد من بايدو</title>
      <dc:creator>Yusuf Khalidd</dc:creator>
      <pubDate>Thu, 14 May 2026 07:14:41 +0000</pubDate>
      <link>https://forem.com/yusuf_khalidd/m-hw-ernie-51-nmwdhj-moe-ljdyd-mn-bydw-26cl</link>
      <guid>https://forem.com/yusuf_khalidd/m-hw-ernie-51-nmwdhj-moe-ljdyd-mn-bydw-26cl</guid>
      <description>&lt;p&gt;أطلقت بايدو ERNIE 5.1 في 9 مايو 2026. الرقم الأهم للمطورين: نموذج Mixture-of-Experts بحوالي ثلث إجمالي معلمات ERNIE 5.0، حقق &lt;strong&gt;المركز الرابع عالميًا في Arena Search&lt;/strong&gt; والأول بين النماذج الصينية بنتيجة 1,223.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;جرّب Apidog اليوم&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;هذا الإصدار مهم لأن بايدو تضع ERNIE 5.1 كنموذج عملي لاستخدام الأدوات ذاتيًا، والكتابة الطويلة، والاستدلال، وليس كنموذج محادثة صيني فقط. إذا كنت تبني وكلاء AI أو تختبر موفري نماذج متعددة باستخدام &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;، فـ ERNIE 5.1 يستحق التقييم خصوصًا إذا كنت تريد نموذجًا صينيًا مستضافًا دون بصمة نموذج 70B.&lt;/p&gt;

&lt;p&gt;في هذا الدليل ستجد ما تحتاجه عمليًا: ما هو ERNIE 5.1، ما الذي تغير في البنية، كيف تقرأ المعايير، ومتى تختاره بدلًا من &lt;a href="http://apidog.com/blog/what-is-deepseek-v4?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;DeepSeek V4&lt;/a&gt; أو &lt;a href="http://apidog.com/blog/what-is-kimi-k2-6?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K2.6&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR: ERNIE 5.1 في فقرة واحدة
&lt;/h2&gt;

&lt;p&gt;ERNIE 5.1 هو نموذج MoE نصي فقط. تقول بايدو إن تدريبه المسبق كلف حوالي 6% من تكلفة النماذج الرائدة المشابهة. يستخدم إجمالي معلمات يقارب ثلث ERNIE 5.0، ومعلمات نشطة لكل تمريرة أمامية تقارب النصف. حقق 1,223 في Arena Search، وتفوق على DeepSeek-V4-Pro في τ³-bench و SpreadsheetBench-Verified، وحقق 99.6 في AIME26 مع استخدام الأدوات. الوصول متاح عبر واجهة دردشة ERNIE، وساحة لعب Baidu AI Studio، وواجهة Qianfan API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5jq1iuff0zsq0biwn4s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft5jq1iuff0zsq0biwn4s.png" alt="ERNIE 5.1" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  لماذا يهم ERNIE 5.1 للمطورين؟
&lt;/h2&gt;

&lt;p&gt;بدل التعامل معه كـ “نموذج جديد من بايدو”، قيّمه من ثلاث زوايا عملية:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. تكلفة أقل قد تعني API أرخص
&lt;/h3&gt;

&lt;p&gt;تدعي بايدو أن تكلفة التدريب المسبق تقارب 6% من تكلفة النماذج المشابهة. هذا لا يعني تلقائيًا أن أسعار Qianfan ستكون منخفضة، لكنه مؤشر يجب مراقبته. إذا انعكس ذلك على التسعير، فقد يصبح ERNIE 5.1 خيارًا اقتصاديًا لسير عمل الوكلاء.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. MoE أكثر مرونة
&lt;/h3&gt;

&lt;p&gt;ERNIE 5.1 يستخدم توجيهًا عبر ثلاثة محاور:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;العمق&lt;/li&gt;
&lt;li&gt;العرض&lt;/li&gt;
&lt;li&gt;الندرة&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;الفكرة العملية: النموذج لا يحتاج إلى تفعيل كل مكوناته لكل طلب. هذا قد يساعد في تقليل التكلفة وزمن الاستجابة مع الحفاظ على جودة جيدة في مهام استخدام الأدوات.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. التركيز على الاستخدام الذاتي للأدوات
&lt;/h3&gt;

&lt;p&gt;الفرق المهم عن إصدارات ERNIE السابقة هو أن ERNIE 5.1 يستهدف صراحةً سيناريوهات agentic tool use. هذا يجعله مرشحًا للاختبار في:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;وكلاء البحث&lt;/li&gt;
&lt;li&gt;وكلاء تحليل الجداول&lt;/li&gt;
&lt;li&gt;سير عمل استدعاء API&lt;/li&gt;
&lt;li&gt;مساعدات كتابة طويلة مع أدوات خارجية&lt;/li&gt;
&lt;li&gt;تطبيقات RAG ثنائية اللغة&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvvfnkwxbbjjsg40iam9b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvvfnkwxbbjjsg40iam9b.png" alt="ERNIE 5.1 benchmarks" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  المعايير: كيف تقرأ النتائج؟
&lt;/h2&gt;

&lt;p&gt;هذه أهم الأرقام التي نشرتها بايدو مع معناها العملي:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;المعيار&lt;/th&gt;
&lt;th&gt;ERNIE 5.1&lt;/th&gt;
&lt;th&gt;ما يختبره&lt;/th&gt;
&lt;th&gt;أقرب منافس&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Arena Search&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;1,223&lt;/strong&gt;، الرابع عالميًا، الأول في الصين&lt;/td&gt;
&lt;td&gt;أسئلة وأجوبة مرتبطة بالبحث بتقييم بشري&lt;/td&gt;
&lt;td&gt;Gemini 3.1 Pro, GPT-5.x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;τ³-bench&lt;/td&gt;
&lt;td&gt;يتفوق على DeepSeek-V4-Pro&lt;/td&gt;
&lt;td&gt;استخدام الأدوات ذاتيًا عبر عدة أدوار&lt;/td&gt;
&lt;td&gt;&lt;a href="http://apidog.com/blog/what-is-deepseek-v4?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;DeepSeek-V4-Pro&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SpreadsheetBench-Verified&lt;/td&gt;
&lt;td&gt;يتفوق على DeepSeek-V4-Pro&lt;/td&gt;
&lt;td&gt;مهام جداول بيانات واقعية&lt;/td&gt;
&lt;td&gt;DeepSeek-V4-Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AIME26 مع الأدوات&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;99.6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;رياضيات مسابقات مع مفسر أكواد&lt;/td&gt;
&lt;td&gt;GPT-5.x, Gemini 3.1 Pro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPQA&lt;/td&gt;
&lt;td&gt;يقارب النماذج الرائدة مغلقة المصدر&lt;/td&gt;
&lt;td&gt;أسئلة علمية بمستوى الدراسات العليا&lt;/td&gt;
&lt;td&gt;Claude Sonnet 4.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MMLU-Pro&lt;/td&gt;
&lt;td&gt;يقارب النماذج الرائدة مغلقة المصدر&lt;/td&gt;
&lt;td&gt;معرفة عامة متقدمة&lt;/td&gt;
&lt;td&gt;النماذج الرائدة&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;تعامل مع هذه النتائج كإشارات أولية، لا كقرار إنتاج مباشر. درجات Arena تعتمد على نوعية المطالبات والمصوتين. درجة AIME26 معززة بالأدوات، وليست بالضرورة انعكاسًا للاستدلال الخالص. لكن τ³-bench و SpreadsheetBench-Verified يستحقان الانتباه لأنهما أقرب إلى سيناريوهات الوكلاء التي يستخدمها المطورون فعليًا.&lt;/p&gt;

&lt;h2&gt;
  
  
  ما نعرفه عن البنية
&lt;/h2&gt;

&lt;p&gt;كشفت بايدو عن معلومات محدودة، لكن المؤكد حتى الآن:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;إجمالي المعلمات:&lt;/strong&gt; حوالي ثلث ERNIE 5.0&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;المعلمات النشطة لكل رمز:&lt;/strong&gt; حوالي نصف ERNIE 5.0&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;التوجيه:&lt;/strong&gt; عبر العمق والعرض والندرة&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;تكلفة التدريب المسبق:&lt;/strong&gt; حوالي 6% من النماذج المشابهة&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;النمطية:&lt;/strong&gt; نص فقط عند الإطلاق&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;اللغات:&lt;/strong&gt; نسخ صينية وإنجليزية&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;لم تُنشر بعد تفاصيل مهمة مثل:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;طول السياق&lt;/li&gt;
&lt;li&gt;عدد المعلمات الدقيق&lt;/li&gt;
&lt;li&gt;حجم بيانات التدريب&lt;/li&gt;
&lt;li&gt;سياسات الاستدعاء للأدوات&lt;/li&gt;
&lt;li&gt;حدود المعدل وأسعار Qianfan النهائية&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;إذا سبق أن اختبرت نماذج MoE صينية مثل &lt;a href="http://apidog.com/blog/how-to-use-glm-5-1-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;GLM 5.1&lt;/a&gt;، فتوقع تجربة تكامل مشابهة: نموذج مستضاف، API، وتقييمات عملية قبل الإنتاج.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdx2ns3kn75ix6wa9a5m2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdx2ns3kn75ix6wa9a5m2.png" alt="ERNIE 5.1 architecture" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ما لا يمكنك فعله مع ERNIE 5.1 بعد
&lt;/h2&gt;

&lt;p&gt;قبل أن تبني عليه، انتبه لهذه القيود:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;لا يدعم الصور.&lt;/strong&gt; ERNIE 5.1 نصي فقط. لمهام الرؤية استخدم ERNIE-VL أو نموذج رؤية خارجي.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;لا يدعم الصوت.&lt;/strong&gt; لا يوجد إدخال أو إخراج صوتي أصلي.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;لا يوجد طول سياق معلن.&lt;/strong&gt; قسّم المستندات الطويلة ولا تفترض نافذة سياق كبيرة.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;لا توجد أوزان عامة.&lt;/strong&gt; النموذج مستضاف فقط. إذا كنت تحتاج نشرًا محليًا، انظر إلى &lt;a href="http://apidog.com/blog/how-to-run-deepseek-v4-locally?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;تشغيل DeepSeek V4 محليًا&lt;/a&gt; أو &lt;a href="http://apidog.com/blog/best-local-llms-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;نماذج اللغة الكبيرة المحلية&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  متى تختار ERNIE 5.1 بدل DeepSeek أو Kimi أو GLM؟
&lt;/h2&gt;

&lt;p&gt;استخدم هذا النموذج الذهني السريع:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;اختر &lt;strong&gt;ERNIE 5.1&lt;/strong&gt; عندما تحتاج إلى agentic tool-use قوي مع إجابات بحثية بالصينية والإنجليزية، وتريد اختبار نموذج مستضاف داخل منظومة بايدو.&lt;/li&gt;
&lt;li&gt;اختر &lt;a href="http://apidog.com/blog/use-deepseek-v4?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;DeepSeek V4&lt;/a&gt; عندما تحتاج إلى أوزان مفتوحة، نشر محلي، أو استدلال رياضي قوي بدون أدوات.&lt;/li&gt;
&lt;li&gt;اختر &lt;a href="http://apidog.com/blog/kimi-k2-6-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Kimi K2.6&lt;/a&gt; عندما تكون نافذة السياق الطويلة أهم من كل شيء، خصوصًا في تطبيقات المستندات.&lt;/li&gt;
&lt;li&gt;اختر &lt;a href="http://apidog.com/blog/glm-5-1-vs-claude-gpt-gemini-deepseek-llm-comparison?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;GLM 5.1&lt;/a&gt; عندما تريد نموذجًا عامًا متوازنًا ولديك بالفعل &lt;a href="http://Z.ai" rel="noopener noreferrer"&gt;Z.ai&lt;/a&gt; أو Zhipu في المكدس.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;لا تعتمد على هذا كتصنيف نهائي. الأفضل هو إنشاء مجموعة اختبار صغيرة من 20 إلى 50 مطالبة حقيقية من منتجك، ثم مقارنة النماذج بنفس المدخلات ونفس مقاييس النجاح.&lt;/p&gt;

&lt;h2&gt;
  
  
  أين يمكنك تجربة ERNIE 5.1؟
&lt;/h2&gt;

&lt;p&gt;لديك ثلاثة مسارات:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://ernie.baidu.com" rel="noopener noreferrer"&gt;&lt;strong&gt;ernie.baidu.com&lt;/strong&gt;&lt;/a&gt;: واجهة دردشة للمستخدمين. مناسبة للتجربة السريعة للكتابة والاستدلال.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Baidu AI Studio Playground&lt;/strong&gt;: ساحة لعب مستضافة تتضمن عروضًا لاستخدام الأدوات. مناسبة قبل كتابة تكامل API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qianfan API&lt;/strong&gt;: نقطة نهاية المطورين. تستخدم مصادقة Bearer token وشكل طلب متوافقًا مع OpenAI. راجع الدليل العملي: &lt;a href="http://apidog.com/blog/how-to-use-ernie-5-1-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;كيفية استخدام واجهة ERNIE 5.1 API&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;إذا كنت تختبر عدة موفرين في الوقت نفسه، يمكنك استخدام &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; لحفظ الطلبات، إدارة المفاتيح، ومقارنة استجابات النماذج جنبًا إلى جنب.&lt;/p&gt;

&lt;h2&gt;
  
  
  مثال عملي: كيف تقيّم ERNIE 5.1 قبل الإنتاج؟
&lt;/h2&gt;

&lt;p&gt;ابدأ بتقييم صغير بدل الاعتماد على المعايير العامة.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. جهّز مجموعة مطالبات حقيقية
&lt;/h3&gt;

&lt;p&gt;مثال JSON بسيط:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tool_call_001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ابحث عن آخر حالة للطلب رقم 12345 باستخدام أداة orders_api ثم لخّص النتيجة للمستخدم."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"expected_tools"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"orders_api"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"success_criteria"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"يستدعي الأداة الصحيحة"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"لا يخترع حالة الطلب"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"يعطي ملخصًا واضحًا"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"spreadsheet_001"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"حلل جدول المبيعات وأخرج أعلى 3 منتجات حسب الإيراد."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"expected_tools"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"spreadsheet_parser"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"success_criteria"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"يستخدم بيانات الجدول فقط"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"يرتب النتائج بشكل صحيح"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"يعرض الحسابات بوضوح"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. اختبر نفس المطالبات على نموذجك الحالي وERNIE 5.1
&lt;/h3&gt;

&lt;p&gt;سجّل لكل حالة:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;هل استدعى الأداة الصحيحة؟&lt;/li&gt;
&lt;li&gt;هل اتبع تنسيق الإخراج؟&lt;/li&gt;
&lt;li&gt;هل هلوس؟&lt;/li&gt;
&lt;li&gt;كم كان زمن الاستجابة؟&lt;/li&gt;
&lt;li&gt;كم كانت التكلفة التقريبية؟&lt;/li&gt;
&lt;li&gt;هل احتجت إلى إعادة المحاولة؟&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. استخدم نتيجة قابلة للمقارنة
&lt;/h3&gt;

&lt;p&gt;مثال بسيط:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;النتيجة = 
  40% صحة استدعاء الأدوات +
  30% جودة الإجابة +
  20% الالتزام بالتنسيق +
  10% زمن الاستجابة
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;هذا النوع من التقييم أكثر فائدة من قراءة لوحة صدارة عامة، لأنه يعكس عبء العمل الحقيقي لديك.&lt;/p&gt;

&lt;h2&gt;
  
  
  التسعير والإطلاق
&lt;/h2&gt;

&lt;p&gt;أعلنت بايدو أن ERNIE 5.1 سيصل إلى أكثر من 10 منصات إنتاج إبداعي بعد الإطلاق. لم تنشر بايدو في منشور الإصدار تسعيرًا عامًا لكل رمز على Qianfan.&lt;/p&gt;

&lt;p&gt;عمليًا، لا تبنِ حسابات التكلفة على افتراضات. عند التقييم:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;افتح لوحة Qianfan.&lt;/li&gt;
&lt;li&gt;تحقق من سعر الإدخال والإخراج.&lt;/li&gt;
&lt;li&gt;اختبر متوسط عدد الرموز في مطالباتك.&lt;/li&gt;
&lt;li&gt;احسب التكلفة لكل مهمة، لا لكل طلب فقط.&lt;/li&gt;
&lt;li&gt;أضف تكلفة إعادة المحاولة وفشل استدعاء الأدوات.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  كيف تفكر في ERNIE 5.1 كمطور؟
&lt;/h2&gt;

&lt;p&gt;اتبع هذه الخطوات قبل دمجه:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. اختبره على agentic eval الخاص بك
&lt;/h3&gt;

&lt;p&gt;لا يكفي أن يتفوق في τ³-bench. ابنِ تقييمًا يعكس أدواتك الفعلية: API داخلية، قواعد بيانات، جداول، مستندات، أو وظائف بحث. يمكنك الاستفادة من منهجية &lt;a href="http://apidog.com/blog/test-local-llms-as-apis?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;اختبار نماذج اللغة الكبيرة كواجهات API&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. تحقق من متطلبات إقامة البيانات
&lt;/h3&gt;

&lt;p&gt;Qianfan مستضاف ضمن منظومة بايدو. إذا كانت متطلباتك تمنع استخدام بنية تحتية في الصين، فلن يحل الأداء العالي هذه المشكلة.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. راقب التسعير وحدود الاستخدام
&lt;/h3&gt;

&lt;p&gt;أهم وعد في ERNIE 5.1 هو الكفاءة. لكن القرار الإنتاجي يعتمد على:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;سعر الرموز&lt;/li&gt;
&lt;li&gt;حدود المعدل&lt;/li&gt;
&lt;li&gt;زمن الاستجابة من منطقتك&lt;/li&gt;
&lt;li&gt;سياسات الحسابات والمؤسسات&lt;/li&gt;
&lt;li&gt;استقرار API&lt;/li&gt;
&lt;li&gt;دعم الأدوات في الطلبات الفعلية&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  الأسئلة المتكررة
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;هل ERNIE 5.1 مفتوح المصدر؟&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
لا. ERNIE 5.1 نموذج مستضاف فقط عبر دردشة بايدو، Baidu AI Studio، وQianfan API. لا توجد أوزان عامة على HuggingFace وقت كتابة هذا المقال.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;هل يدعم ERNIE 5.1 الصور؟&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
لا. ERNIE 5.1 نصي فقط. لمهام الرؤية استخدم ERNIE-VL أو نموذجًا متعدد الوسائط مثل &lt;a href="http://apidog.com/blog/how-to-use-qwen-3-5-omni?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Qwen 3.5 Omni&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ما طول السياق؟&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
لم تنشر بايدو رقمًا رسميًا لطول السياق. حتى يحدث ذلك، قسّم المستندات الطويلة وصمم نظامك بشكل دفاعي.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;هل يمكن استخدام ERNIE 5.1 من خارج الصين؟&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
يمكن الوصول إلى واجهة الدردشة وQianfan API من عدة مناطق، لكن زمن الاستجابة والتحقق من الحساب قد يختلفان. بعض ميزات المؤسسات قد تتطلب رقم هاتف صينيًا أو ترخيص عمل. راجع &lt;a href="http://apidog.com/blog/how-to-use-ernie-5-1-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل استخدام ERNIE 5.1 API&lt;/a&gt; للتفاصيل.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;هل ERNIE 5.1 أفضل من DeepSeek-V4-Pro؟&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
حسب أرقام بايدو، نعم في τ³-bench و SpreadsheetBench-Verified. لكنه ليس بديلًا مباشرًا إذا كنت تحتاج أوزانًا مفتوحة أو نشرًا محليًا. القرار يعتمد على نموذج النشر وسيناريو الاستخدام.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخلاصة
&lt;/h2&gt;

&lt;p&gt;ERNIE 5.1 ليس مجرد تحديث رقمي. أهميته للمطورين تأتي من كفاءته المعلنة وتركيزه على استخدام الأدوات ذاتيًا. إذا كنت تبني وكلاء AI أو تقارن نماذج صينية مستضافة، أضفه إلى مجموعة الاختبار، لكن لا تعتمد عليه قبل تشغيل تقييماتك الخاصة على مطالبات حقيقية من منتجك.&lt;/p&gt;

&lt;p&gt;ابدأ بمجموعة صغيرة من الحالات، اختبرها عبر Qianfan API، وقارن النتائج مع نموذجك الحالي في مساحة عمل واحدة باستخدام &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>قضيت صباحًا مع وضع Spec-First في Apidog: المصمم المرئي لم يعد البالغ الوحيد في الغرفة</title>
      <dc:creator>Yusuf Khalidd</dc:creator>
      <pubDate>Thu, 14 May 2026 07:05:27 +0000</pubDate>
      <link>https://forem.com/yusuf_khalidd/qdyt-sbhan-m-wd-spec-first-fy-apidog-lmsmm-lmryy-lm-yd-lblg-lwhyd-fy-lgrf-a63</link>
      <guid>https://forem.com/yusuf_khalidd/qdyt-sbhan-m-wd-spec-first-fy-apidog-lmsmm-lmryy-lm-yd-lblg-lwhyd-fy-lgrf-a63</guid>
      <description>&lt;p&gt;يوجد نمطان شائعان داخل فرق تطوير واجهات برمجة التطبيقات: فريق يكتب مواصفات OpenAPI يدويًا داخل Git ويتعامل معها كمصدر الحقيقة، وفريق يستخدم مصممًا مرئيًا ثم يصدّر المواصفات عند الحاجة.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;جرّب Apidog اليوم&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;جرّبت النمطين. الكتابة اليدوية أبطأ في البداية، لكنها أوضح وأكثر قابلية للمراجعة بعد أسابيع من التطوير. أما المصمم المرئي فهو أسرع في اليوم الأول، لكنه قد يخلق فجوة بين ما هو موجود في الأداة وما هو موجود في المستودع.&lt;/p&gt;

&lt;p&gt;حتى وقت قريب، كان Apidog مناسبًا أكثر للنمط الثاني: تصميم مرئي ممتاز، مع إمكانية تصدير YAML عند الحاجة. لكن مع ظهور &lt;a href="https://docs.apidog.com/spec-first-mode-beta-2058268m0?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;وضع Spec-First التجريبي&lt;/a&gt;، أصبح بالإمكان جعل ملف OpenAPI نفسه هو مركز العمل، مع مزامنة مباشرة مع Git.&lt;/p&gt;

&lt;p&gt;في هذا المقال أشرح كيف يعمل الوضع الجديد عمليًا، وكيف تُعدّه، ومتى يكون مناسبًا لفريقك.&lt;/p&gt;

&lt;h2&gt;
  
  
  ما الذي يغيّره وضع Spec-First فعليًا؟
&lt;/h2&gt;

&lt;p&gt;في Apidog يوجد الآن نمطان مختلفان لإنشاء المشاريع:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;الوضع العام&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;تبني الـ API عبر واجهة مرئية.&lt;/li&gt;
&lt;li&gt;تضيف المسارات، الطلبات، الاستجابات، والمخططات من خلال نماذج.&lt;/li&gt;
&lt;li&gt;يتم إنشاء مواصفات OpenAPI خلف الكواليس.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;وضع Spec-First&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;تعمل مباشرة على ملفات &lt;code&gt;.yaml&lt;/code&gt; أو &lt;code&gt;.json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;ملف OpenAPI في المستودع هو مصدر الحقيقة.&lt;/li&gt;
&lt;li&gt;تحصل على محرر كود، إكمال تلقائي حسب مخطط OpenAPI، ومخطط جانبي يتحدث أثناء الكتابة.&lt;/li&gt;
&lt;li&gt;توجد مزامنة ثنائية الاتجاه مع Git.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;الفكرة الأساسية: أنت لا “تصدّر” المواصفات من الأداة، بل تعدّل الملف نفسه الذي يعيش في المستودع.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;openapi&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;3.0.3&lt;/span&gt;
&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Store API&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1.0.0&lt;/span&gt;

&lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;/store/token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;post&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Create store token&lt;/span&gt;
      &lt;span class="na"&gt;responses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;200"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Token created&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;عند إضافة مسار مثل &lt;code&gt;/store/token&lt;/code&gt;، يظهر في المخطط الجانبي داخل Apidog دون الحاجة إلى الانتقال بين ملفات أو البحث يدويًا.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-75.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-75.png" alt="مساحة عمل وضع Spec-First Mode، في منتصف التحرير لمشروع متجر للحيوانات الأليفة. الشريط الجانبي الأيسر هو مخطط المسارات الذي تم إنشاؤه تلقائيًا - لاحظ المسارات (224) في الأعلى، ثم المسارات الفردية مثل /store/auth/{email}، /admin/auth، /store/token التي تظهر مباشرة من الملف. أعلى اليمين: مؤشر التغييرات (1) وزر Commit &amp;amp; Push الأخضر. أسفل اليسار: تمت المزامنة الآن - مؤشر حالة المزامنة الذي يشير إليه النص لاحقًا." width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;الميزة المهمة هنا ليست فقط تحرير YAML. يمكنك فعل ذلك في VS Code. القيمة الحقيقية هي أن Apidog يعرض بنية الـ API كتنقل حي فوق ملف المواصفات نفسه.&lt;/p&gt;

&lt;h2&gt;
  
  
  إعداد مشروع Spec-First خطوة بخطوة
&lt;/h2&gt;

&lt;p&gt;هذا هو المسار العملي لإنشاء مشروع يعتمد على المواصفات أولًا.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. أنشئ مشروعًا جديدًا بالوضع الصحيح
&lt;/h3&gt;

&lt;p&gt;من شاشة المشاريع:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+ مشروع جديد → عام → وضع المواصفات أولاً
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;انتبه إلى اختيار الوضع. الوضع العام قد يكون هو الافتراضي أو الموصى به، لذلك من السهل تجاوزه بسرعة.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. اربط المشروع بمستودع Git
&lt;/h3&gt;

&lt;p&gt;بعد اختيار وضع Spec-First:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;افتح خيار &lt;strong&gt;الاتصال بمستودع Git&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;فوّض مزود Git الذي تستخدمه.&lt;/li&gt;
&lt;li&gt;اختر:

&lt;ul&gt;
&lt;li&gt;المنظمة&lt;/li&gt;
&lt;li&gt;المستودع&lt;/li&gt;
&lt;li&gt;الفرع الرئيسي&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;استخدمت GitHub في التجربة، لكن الفكرة نفسها تنطبق على مزودي Git المدعومين.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. هيّئ المشروع
&lt;/h3&gt;

&lt;p&gt;أدخل:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;اسم المشروع&lt;/li&gt;
&lt;li&gt;إعدادات الفريق&lt;/li&gt;
&lt;li&gt;صلاحيات الوصول&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ثم انقر &lt;strong&gt;إنشاء&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;في أول مزامنة، يسحب Apidog ملفات &lt;code&gt;.yaml&lt;/code&gt; و &lt;code&gt;.json&lt;/code&gt; الموجودة في المستودع إلى مساحة العمل.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-76.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-76.png" alt="الخطوات 1-3 توجد في نفس مربع الحوار. الأعلى: مربعا الوضع. الوضع العام معلم بـ " width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. حرّر ملف OpenAPI مباشرة
&lt;/h3&gt;

&lt;p&gt;افتح ملف YAML أو JSON من داخل المشروع. ستحصل على:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;تمييز نحوي&lt;/li&gt;
&lt;li&gt;إكمال تلقائي حسب OpenAPI Schema&lt;/li&gt;
&lt;li&gt;مخطط جانبي للمسارات&lt;/li&gt;
&lt;li&gt;تنقل مباشر إلى تعريف كل endpoint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;مثال عملي لإضافة endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;/admin/auth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;post&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Admin login&lt;/span&gt;
      &lt;span class="na"&gt;requestBody&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
        &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;application/json&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;schema&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
              &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;email&lt;/span&gt;
                &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;password&lt;/span&gt;
              &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
                  &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;email&lt;/span&gt;
                &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
                  &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;password&lt;/span&gt;
      &lt;span class="na"&gt;responses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;200"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Login successful&lt;/span&gt;
        &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;401"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Invalid credentials&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;بعد الكتابة، يظهر المسار &lt;code&gt;/admin/auth&lt;/code&gt; في الشريط الجانبي، ويمكنك النقر عليه للعودة إلى موضعه في الملف.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. نفّذ Commit and Push
&lt;/h3&gt;

&lt;p&gt;عند الانتهاء من التعديل:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;انقر &lt;strong&gt;Commit &amp;amp; Push&lt;/strong&gt; في أعلى اليمين.&lt;/li&gt;
&lt;li&gt;راجع الملفات المعدلة في قسم &lt;strong&gt;التغييرات&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;اكتب رسالة commit واضحة.&lt;/li&gt;
&lt;li&gt;انقر &lt;strong&gt;Push&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;مثال لرسالة commit مناسبة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add admin authentication endpoint to OpenAPI spec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;لا توجد خطوة staging منفصلة. أي ملف ظاهر في قائمة التغييرات يدخل في commit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-77.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.apidog.com%2Fblog-next%2F2026%2F05%2Fimage-77.png" alt="مربع حوار " width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6. راقب حالة المزامنة
&lt;/h3&gt;

&lt;p&gt;في أسفل اليسار سترى مؤشر المزامنة، مثل:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;تمت المزامنة الآن
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;هذا المؤشر يخبرك هل:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;التغييرات المحلية دُفعت إلى Git&lt;/li&gt;
&lt;li&gt;هناك تغييرات بعيدة تحتاج إلى سحب&lt;/li&gt;
&lt;li&gt;المشروع غير متزامن&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;عمليًا، هذا المؤشر مهم جدًا إذا كان أكثر من شخص يعدّل المواصفات.&lt;/p&gt;

&lt;h2&gt;
  
  
  ملاحظات عملية من التجربة
&lt;/h2&gt;

&lt;h3&gt;
  
  
  المخطط الجانبي يتحدث بسرعة
&lt;/h3&gt;

&lt;p&gt;في بعض محررات OpenAPI، لا يظهر المسار الجديد إلا بعد الحفظ أو إعادة التحليل. في Apidog، المخطط الجانبي تحدّث أثناء الكتابة تقريبًا.&lt;/p&gt;

&lt;p&gt;هذا يجعل المخطط أداة تنقل فعلية، وليس مجرد تقرير حالة بعد انتهاء العمل.&lt;/p&gt;

&lt;h3&gt;
  
  
  تكامل Git ثنائي الاتجاه
&lt;/h3&gt;

&lt;p&gt;جرّبت تعديل الملف من الطرفية ثم دفع التغييرات إلى Git بينما كان Apidog مفتوحًا.&lt;/p&gt;

&lt;p&gt;ما حدث:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;اكتشف Apidog أن الفرع المحلي داخل الأداة متأخر.&lt;/li&gt;
&lt;li&gt;تغيّر مؤشر المزامنة.&lt;/li&gt;
&lt;li&gt;أمكن سحب التغييرات إلى المحرر.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;هذا مهم إذا كان بعض أعضاء الفريق يفضلون Vim أو VS Code أو أي محرر آخر. طالما أن الجميع يعدّل الملف نفسه في Git، يمكن لكل شخص استخدام الأداة التي تناسبه.&lt;/p&gt;

&lt;h3&gt;
  
  
  لا يمكنك التحويل إلى المصمم المرئي داخل نفس المشروع
&lt;/h3&gt;

&lt;p&gt;إذا أنشأت المشروع بوضع Spec-First، فهو يبقى مشروعًا قائمًا على المواصفات.&lt;/p&gt;

&lt;p&gt;لا يوجد تبديل مباشر إلى الوضع المرئي داخل المشروع نفسه، لأن نموذج البيانات مختلف.&lt;/p&gt;

&lt;p&gt;إذا احتجت إلى دعم النمطين، فالخيار العملي هو:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;اجعل مستودع Git هو مصدر الحقيقة.&lt;/li&gt;
&lt;li&gt;استخدم مشروع Spec-First للعمل على المواصفات.&lt;/li&gt;
&lt;li&gt;استخدم مشروعًا منفصلًا يستورد من المصدر نفسه عند الحاجة إلى الواجهة المرئية.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;هذا ليس مثاليًا، لكنه واضح وقابل للإدارة.&lt;/p&gt;

&lt;h2&gt;
  
  
  متى تستخدم Spec-First؟
&lt;/h2&gt;

&lt;p&gt;استخدم هذا الوضع إذا كان فريقك:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;يكتب OpenAPI يدويًا بالفعل&lt;/li&gt;
&lt;li&gt;يراجع تغييرات الـ API عبر Pull Requests&lt;/li&gt;
&lt;li&gt;يشغّل أدوات مثل:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;spectral lint openapi.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;يولّد SDKs أو clients من ملف المواصفات&lt;/li&gt;
&lt;li&gt;يريد أن تكون المواصفات داخل Git بدل الاعتماد على export يدوي&lt;/li&gt;
&lt;li&gt;يحتاج إلى تقليل الفجوة بين “المواصفات في الأداة” و“المواصفات في المستودع”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;مثال لسير عمل مناسب:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; add-admin-auth
&lt;span class="c"&gt;# تعديل openapi.yaml داخل Apidog&lt;/span&gt;
&lt;span class="c"&gt;# Commit &amp;amp; Push من Apidog&lt;/span&gt;
&lt;span class="c"&gt;# فتح Pull Request&lt;/span&gt;
&lt;span class="c"&gt;# تشغيل CI للتحقق من المواصفات&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  متى لا تستخدمه؟
&lt;/h2&gt;

&lt;p&gt;لا أنصح به إذا كان فريقك:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;لا يلمس OpenAPI مباشرة&lt;/li&gt;
&lt;li&gt;يعتمد بالكامل على الواجهة المرئية لفهم الـ API&lt;/li&gt;
&lt;li&gt;يضم مساهمين غير معتادين على YAML أو JSON&lt;/li&gt;
&lt;li&gt;يحتاج إلى مزج الوضع المرئي ووضع Spec-First داخل المشروع نفسه&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;في هذه الحالات، الوضع العام في Apidog ما زال مناسبًا أكثر.&lt;/p&gt;

&lt;h2&gt;
  
  
  خلاصة
&lt;/h2&gt;

&lt;p&gt;وضع Spec-First في Apidog يجعل ملف OpenAPI داخل Git هو مصدر الحقيقة، بدل أن يكون ناتجًا يتم تصديره من أداة تصميم.&lt;/p&gt;

&lt;p&gt;النتيجة العملية:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;تعدّل &lt;code&gt;.yaml&lt;/code&gt; أو &lt;code&gt;.json&lt;/code&gt; مباشرة.&lt;/li&gt;
&lt;li&gt;تحصل على إكمال تلقائي ومخطط جانبي.&lt;/li&gt;
&lt;li&gt;تزامن التغييرات مع Git من داخل الأداة.&lt;/li&gt;
&lt;li&gt;يستطيع الفريق استخدام Git كسير العمل الأساسي للمواصفات.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;إذا كان فريقك يتعامل مع OpenAPI كجزء من الكود، فهذا الوضع يستحق التجربة. أنشئ مشروعًا جديدًا، اختر &lt;strong&gt;وضع المواصفات أولاً&lt;/strong&gt;، اربطه بمستودع تثق به، وابدأ بأول commit صغير.&lt;/p&gt;

</description>
      <category>api</category>
      <category>productivity</category>
      <category>tooling</category>
      <category>webdev</category>
    </item>
    <item>
      <title>كيفية استخدام Claude Agent SDK مع خطة Claude الخاصة بك؟</title>
      <dc:creator>Yusuf Khalidd</dc:creator>
      <pubDate>Thu, 14 May 2026 03:57:51 +0000</pubDate>
      <link>https://forem.com/yusuf_khalidd/kyfy-stkhdm-claude-agent-sdk-m-kht-claude-lkhs-bk-3hmf</link>
      <guid>https://forem.com/yusuf_khalidd/kyfy-stkhdm-claude-agent-sdk-m-kht-claude-lkhs-bk-3hmf</guid>
      <description>&lt;p&gt;تسمح لك Anthropic بتشغيل Claude Agent SDK على اشتراكك الحالي في Claude اعتبارًا من 15 يونيو 2026. سابقًا، كان بناء أي عميل باستخدام Agent SDK يتطلب مفتاح API منفصلًا وفوترة دفع حسب الاستخدام، حتى لو كنت تدفع بالفعل مقابل Claude Pro أو Max. الآن تتضمن خطة Claude الشهرية رصيدًا مخصصًا لاستخدام Agent SDK، ولا تحتاج إلى مفتاح API للتجربة.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;جرّب Apidog اليوم&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;إذا كنت تريد بناء عميل مخصص مثل بوت نشر، مساعد بحث، أو أداة فرز مشكلات، فهذا التغيير يقلل العائق الأول: لم تعد بحاجة إلى إعداد فوترة API منفصلة فقط لتجربة SDK. تحصل خطة Pro على رصيد شهري بقيمة 20 دولارًا، وخطة Max 20x على 200 دولار، ومقاعد Team Premium على 100 دولار.&lt;/p&gt;

&lt;h2&gt;
  
  
  ما الذي تغير في 15 يونيو 2026؟
&lt;/h2&gt;

&lt;p&gt;أصبح استخدام Claude Agent SDK يُخصم من رصيد شهري مرتبط بخطة Claude الخاصة بك. سابقًا، كان الاستخدام يُفوتر عبر Anthropic API ورصيد منفصل في لوحة التحكم.&lt;/p&gt;

&lt;p&gt;الرصيد حسب الخطة:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;الخطة&lt;/th&gt;
&lt;th&gt;رصيد Agent SDK الشهري&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max 5x&lt;/td&gt;
&lt;td&gt;$100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max 20x&lt;/td&gt;
&lt;td&gt;$200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Team Standard لكل مقعد&lt;/td&gt;
&lt;td&gt;$20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Team Premium لكل مقعد&lt;/td&gt;
&lt;td&gt;$100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise حسب الاستخدام&lt;/td&gt;
&lt;td&gt;$20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;مقعد Enterprise Premium&lt;/td&gt;
&lt;td&gt;$200&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;قواعد مهمة قبل البدء:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;مقاعد Enterprise Standard لا تحصل على رصيد.&lt;/strong&gt; تحتاج إلى مفتاح API أو ترقية المقعد إلى Premium.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;الأرصدة لكل مستخدم وغير قابلة للتحويل.&lt;/strong&gt; لا يمكن دمج رصيدك مع رصيد زميلك.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;الأرصدة غير المستخدمة لا تُرحّل.&lt;/strong&gt; يتم تصفير المتبقي في نهاية دورة الفوترة.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;يجب الاشتراك مرة واحدة.&lt;/strong&gt; لن يتم تفعيل الرصيد حتى تطالب به يدويًا مرة واحدة، ثم يتجدد شهريًا.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;مستخدمو &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; لا يحصلون على هذا الرصيد تلقائيًا.&lt;/strong&gt; إذا كنت تصادق عبر مفتاح API، فأنت تستخدم نموذج فوترة API القديم.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ما الذي يغطيه الرصيد؟
&lt;/h2&gt;

&lt;p&gt;يغطي رصيد Agent SDK أحمال العمل البرمجية وغير التفاعلية، مثل:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;استدعاءات Claude Agent SDK من Python أو TypeScript.&lt;/li&gt;
&lt;li&gt;أمر &lt;code&gt;claude -p&lt;/code&gt; في Claude Code، أي الوضع غير التفاعلي.&lt;/li&gt;
&lt;li&gt;تكامل Claude Code مع GitHub Actions.&lt;/li&gt;
&lt;li&gt;تطبيقات الطرف الثالث التي تصادق باستخدام Agent SDK.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ولا يغطي:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;جلسات Claude Code التفاعلية.&lt;/li&gt;
&lt;li&gt;محادثات Claude عبر الويب أو تطبيق الهاتف.&lt;/li&gt;
&lt;li&gt;جلسات Claude Cowork.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;بمعنى آخر: استخدم الرصيد للمهام المؤتمتة، وليس للمحادثات اليومية. استخدام Claude Code التفاعلي يبقى ضمن حدود الخطة العادية، والتي &lt;a href="http://apidog.com/blog/claude-code-weekly-limits-50-percent-increase-july-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;زادتها Anthropic مؤخرًا بنسبة 50% حتى 13 يوليو&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ماذا يحدث عند نفاد الرصيد؟
&lt;/h2&gt;

&lt;p&gt;يعتمد السلوك على إعداد الاستخدام الإضافي:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;الاستخدام الإضافي مفعّل:&lt;/strong&gt; يتم فوترة ما بعد الرصيد بأسعار API القياسية.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;الاستخدام الإضافي معطّل:&lt;/strong&gt; تتوقف الطلبات عند سقف الرصيد حتى دورة الفوترة التالية.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;للنماذج الأولية، اترك الاستخدام الإضافي معطلًا لتجنب الفواتير المفاجئة. للإنتاج، فعّله فقط إذا كان توقف العميل غير مقبول.&lt;/p&gt;

&lt;p&gt;يتم دائمًا استهلاك الرصيد أولًا، ثم تبدأ فوترة الاستخدام الزائد إن كانت مفعلة.&lt;/p&gt;

&lt;h2&gt;
  
  
  كيفية الاشتراك في رصيد Agent SDK
&lt;/h2&gt;

&lt;p&gt;الرصيد لا يعمل تلقائيًا. اتبع الخطوات التالية مرة واحدة:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;سجّل الدخول إلى حساب Claude الذي يملك الاشتراك.&lt;/li&gt;
&lt;li&gt;افتح إعدادات Claude Agent SDK من &lt;a href="https://support.claude.com/en/articles/15036540-use-the-claude-agent-sdk-with-your-claude-plan" rel="noopener noreferrer"&gt;مقالة الدعم الرسمية لـ Anthropic&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;طالب بالرصيد.&lt;/li&gt;
&lt;li&gt;بعد التفعيل، سيتجدد الرصيد تلقائيًا كل شهر.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;إذا كنت ضمن خطة Team أو Enterprise، يجب على كل مستخدم المطالبة برصيده بنفسه. لا يمكن للمسؤول تفعيل الرصيد نيابة عن الجميع.&lt;/p&gt;

&lt;h2&gt;
  
  
  إعداد Claude Agent SDK في Python
&lt;/h2&gt;

&lt;p&gt;ثبّت الحزمة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;claude-agent-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;سجّل الدخول عبر Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;هذا يخزن بيانات الاعتماد المرتبطة بخطتك محليًا. لا تضبط &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; إذا كنت تريد استخدام الرصيد المرتبط بالخطة.&lt;/p&gt;

&lt;p&gt;مثال عميل بسيط:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;claude_agent_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;

&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;system_prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a code review assistant.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Review the diff in /tmp/patch.diff and flag concerns.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;نقطة الاختبار المهمة: شغّل المثال بدون &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; وتأكد أن الاستخدام يظهر ضمن رصيد Agent SDK في إعدادات حسابك.&lt;/p&gt;

&lt;h2&gt;
  
  
  إعداد Claude Agent SDK في TypeScript
&lt;/h2&gt;

&lt;p&gt;ثبّت الحزمة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @anthropic-ai/claude-agent-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;سجّل الدخول:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;مثال عميل بسيط:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Agent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@anthropic-ai/claude-agent-sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;systemPrompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a code review assistant.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Review the diff in /tmp/patch.diff and flag concerns.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;في بيئات CI أو Docker أو بيئات التطوير البعيدة، قد لا يجد SDK بيانات اعتماد Claude Code تلقائيًا. في هذه الحالة، استخدم متغيرات البيئة التي تنشرها Anthropic في &lt;a href="https://docs.claude.com/en/docs/agent-sdk" rel="noopener noreferrer"&gt;وثائق Agent SDK&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;إذا واجهت أخطاء إعداد قبل الوصول إلى SDK، فراجع &lt;a href="http://apidog.com/blog/fix-invalid-custom3p-enterprise-config-claude-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;إصلاح خطأ تكوين المؤسسة custom3p غير الصالح&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  استخدام &lt;code&gt;claude -p&lt;/code&gt; للمهام المؤتمتة
&lt;/h2&gt;

&lt;p&gt;لا تحتاج دائمًا إلى كتابة كود لاستخدام رصيد Agent SDK. يمكنك استخدام:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"Your prompt here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;الخيار &lt;code&gt;-p&lt;/code&gt; يشغّل Claude Code في وضع غير تفاعلي: يعطي نتيجة ثم يخرج. هذا مناسب لـ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;مهام CI.&lt;/li&gt;
&lt;li&gt;مهام cron.&lt;/li&gt;
&lt;li&gt;Git hooks.&lt;/li&gt;
&lt;li&gt;مراجعات diff تلقائية.&lt;/li&gt;
&lt;li&gt;إنشاء تقارير قصيرة من المستودع.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;مثال hook قبل الالتزام:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/usr/bin/env bash&lt;/span&gt;
&lt;span class="c"&gt;# .git/hooks/pre-commit&lt;/span&gt;

&lt;span class="nv"&gt;DIFF&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git diff &lt;span class="nt"&gt;--cached&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

claude &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"Review this diff for security issues, secret leaks, and breaking changes. Return PASS or FAIL with reasoning:

&lt;/span&gt;&lt;span class="nv"&gt;$DIFF&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;بعد 15 يونيو، يتم خصم هذا النوع من التشغيلات من رصيد Agent SDK، وليس من ميزانية Claude Code التفاعلية.&lt;/p&gt;

&lt;p&gt;يمكن دمج هذا النمط مع &lt;a href="http://apidog.com/blog/goal-command-codex-claude-code-autonomous-agents?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;أمر &lt;code&gt;/goal&lt;/code&gt;&lt;/a&gt; للحلقات المستقلة، ومع &lt;a href="http://apidog.com/blog/how-to-write-agents-md-files?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;ملفات AGENTS.md&lt;/a&gt; لتوفير سياق ثابت للعميل.&lt;/p&gt;

&lt;h2&gt;
  
  
  استخدام GitHub Actions
&lt;/h2&gt;

&lt;p&gt;تكامل Claude Code مع GitHub Actions يقع أيضًا ضمن رصيد Agent SDK.&lt;/p&gt;

&lt;p&gt;ينطبق ذلك على تشغيلات مثل:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;مراجعة Pull Requests.&lt;/li&gt;
&lt;li&gt;فرز issues.&lt;/li&gt;
&lt;li&gt;إنشاء ملاحظات إصدار.&lt;/li&gt;
&lt;li&gt;تشغيل مهام صيانة على المستودع.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;إذا كان التكامل مثبتًا عبر حساب مستخدم طالب برصيد Agent SDK، يتم خصم التشغيلات من رصيد ذلك المستخدم.&lt;/p&gt;

&lt;p&gt;هذا مفيد لمشاريع مثل &lt;a href="http://apidog.com/blog/clawsweeper-openclaw-github-triage-bot?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Clawsweeper، بوت فرز GitHub المبني على Claude Code&lt;/a&gt;، حيث تعمل الأتمتة باستمرار وكانت سابقًا تعتمد على مفتاح API وفوترة منفصلة.&lt;/p&gt;

&lt;h2&gt;
  
  
  بناء عميل حقيقي باستخدام Agent SDK و Apidog
&lt;/h2&gt;

&lt;p&gt;القيمة العملية لـ Agent SDK تظهر عندما لا يكتفي العميل بإنتاج نص، بل يتعامل مع واجهات API حقيقية. عندها يحتاج العميل إلى عقد API واضح بدل تخمين شكل الطلبات والاستجابات.&lt;/p&gt;

&lt;p&gt;يمكن استخدام &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt; كطبقة عقد API في هذا التدفق:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;عرّف عقد API في Apidog.&lt;/strong&gt; أضف endpoints، مخططات الطلب والاستجابة، وأمثلة payload.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;صدّر OpenAPI.&lt;/strong&gt; استخدمه كسياق للعميل أو كمرجع لتوليد الأدوات.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;اربط Agent SDK بنقاط النهاية الفعلية.&lt;/strong&gt; اجعل العميل يستدعي API بناءً على المخططات المحددة.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;تحقق من السلوك عبر &lt;a href="http://apidog.com/blog/api-testing-tool-qa-engineers?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog CLI&lt;/a&gt;.&lt;/strong&gt; اجعل كل تشغيل عميل يتحقق أن API ما زال يطابق العقد.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;إذا كان عميلك ينظم أدوات عبر MCP servers، استخدم &lt;a href="http://apidog.com/blog/mcp-server-testing-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;سير عمل اختبار خادم MCP مع Apidog&lt;/a&gt; لاختبار الأدوات التي يستدعيها العميل.&lt;/p&gt;

&lt;p&gt;الفكرة الأوسع موضحة في &lt;a href="http://apidog.com/blog/api-platform-design-first-api-workflow?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل سير عمل API الذي يركز على التصميم أولًا&lt;/a&gt;: عندما يمتلك العميل عقدًا واضحًا، تقل أخطاء JSON schema ويصبح وقتك موجهًا لتحسين القيود والسلوك بدل تصحيح payloads عشوائية.&lt;/p&gt;

&lt;p&gt;يمكنك &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;تنزيل Apidog&lt;/a&gt; مجانًا إذا كنت تريد طبقة عقود API لمشاريع Agent SDK.&lt;/p&gt;

&lt;h2&gt;
  
  
  متى تحتاج إلى مفتاح API منفصل؟
&lt;/h2&gt;

&lt;p&gt;الرصيد المرتبط بالخطة مناسب لمعظم التجارب والعمل الشخصي. لكن مفتاح API مستقل يبقى أفضل في حالات معينة:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;عملاء إنتاج يحتاجون إلى ميزانية وفوترة واضحة.&lt;/strong&gt; رصيد الخطة محدود بقيمة شهرية ثابتة.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;وصول مشترك بين عدة مستخدمين أو فرق.&lt;/strong&gt; مفاتيح API ليست مرتبطة بمستخدم واحد بنفس طريقة رصيد الخطة.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;مقاعد Enterprise Standard.&lt;/strong&gt; هذه المقاعد لا تحصل على رصيد Agent SDK.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;إذا كنت تبحث عن مسارات استخدام مختلفة، راجع &lt;a href="http://apidog.com/blog/get-free-unlimited-claude-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل الوصول المجاني إلى Claude API&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  قائمة تحقق قبل التشغيل
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] تأكد أن خطتك مؤهلة: Pro أو Max 5x أو Max 20x أو Team Standard أو Team Premium أو Enterprise usage-based أو Enterprise Premium seat.&lt;/li&gt;
&lt;li&gt;[ ] طالب برصيد Agent SDK من إعدادات Claude.&lt;/li&gt;
&lt;li&gt;[ ] قرر هل تريد تفعيل الاستخدام الإضافي أم لا.&lt;/li&gt;
&lt;li&gt;[ ] شغّل &lt;code&gt;claude login&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;[ ] ثبّت حزمة Python أو TypeScript.&lt;/li&gt;
&lt;li&gt;[ ] شغّل عميلًا بسيطًا بدون &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;[ ] راقب الرصيد بعد أول عدة تشغيلات.&lt;/li&gt;
&lt;li&gt;[ ] إذا كنت تستخدم CI، تأكد من إعداد بيانات الاعتماد حسب وثائق Anthropic.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  الأسئلة الشائعة
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;هل أحتاج إلى إزالة &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; القديم؟&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;لا بالضرورة. عند توفر بيانات اعتماد Claude Code المحلية بعد &lt;code&gt;claude login&lt;/code&gt;، يمكن لـ SDK استخدام مصادقة الخطة. إذا كان &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; مستخدمًا لأدوات أخرى، اتركه، لكن اختبر أن تشغيلات SDK تُخصم من رصيد الخطة.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;هل الرصيد يُحسب بعدد الطلبات؟&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;لا. الرصيد مقوم بالدولار. كل استدعاء يستهلك جزءًا من الرصيد حسب تكلفة النموذج، الرموز، السياق، واستخدام الأدوات.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;هل يمكنني مشاركة الرصيد مع زميل؟&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;لا. الرصيد لكل مستخدم وغير قابل للتحويل.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ماذا يحدث لرصيد Anthropic API القديم؟&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;يبقى منفصلًا. رصيد الخطة يستخدم Agent SDK والأسطح المدعومة، بينما رصيد API القديم يستمر لأحمال العمل التي تستخدم مفاتيح API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;هل Agent SDK هو Claude Code؟&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;لا. Claude Code هو واجهة سطر أوامر وإضافات IDE. Agent SDK مكتبة برمجية لبناء عملاء مخصصين في Python أو TypeScript. الرصيد يغطي SDK و&lt;code&gt;claude -p&lt;/code&gt; غير التفاعلي، بينما يبقى Claude Code التفاعلي ضمن حدود الخطة العادية.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;هل تتغير فوترة GitHub Actions؟&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;إذا كنت تستخدم تكامل Claude Code GitHub Actions الرسمي وكان حساب المستخدم المثبت قد طالب بالرصيد، تُخصم التشغيلات من رصيد Agent SDK.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;هل يعمل الرصيد خارج SDK و&lt;code&gt;claude -p&lt;/code&gt; وGitHub Actions؟&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;لا. ينطبق الرصيد على الأسطح المدعومة فقط: Python/TypeScript SDK، أمر &lt;code&gt;claude -p&lt;/code&gt;، GitHub Actions، وتطبيقات Agent SDK التابعة لجهات خارجية. أي استخدام آخر يرجع إلى حدود خطة Claude العادية أو مفتاح API حسب طريقة المصادقة.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>زيادة كود كلود الأسبوعية 50% حتى 13 يوليو: دليل المستخدمين المحترفين، ماكس، والفرق للاستفادة من الحصة الإضافية</title>
      <dc:creator>Yusuf Khalidd</dc:creator>
      <pubDate>Thu, 14 May 2026 02:58:17 +0000</pubDate>
      <link>https://forem.com/yusuf_khalidd/zyd-kwd-klwd-lsbwy-50-ht-13-ywlyw-dlyl-lmstkhdmyn-lmhtrfyn-mks-wlfrq-llstfd-mn-2ein</link>
      <guid>https://forem.com/yusuf_khalidd/zyd-kwd-klwd-lsbwy-50-ht-13-ywlyw-dlyl-lmstkhdmyn-lmhtrfyn-mks-wlfrq-llstfd-mn-2ein</guid>
      <description>&lt;p&gt;قامت Anthropic بزيادة حدود الاستخدام الأسبوعي لـ Claude Code بنسبة 50% حتى 13 يوليو الساعة 6 مساءً بتوقيت المحيط الهادئ الصيفي (1 صباحًا بتوقيت جرينتش، 14 يوليو). ينطبق ذلك على جميع الخطط المدفوعة: Pro وMax وTeam والخطط المؤسسية القائمة على المقاعد، ويعمل في كل واجهات Claude Code: CLI، إضافات IDE، تطبيق سطح المكتب، والويب. لا تحتاج إلى تفعيل أي خيار؛ السقف الجديد موجود بالفعل في حسابك.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;جرّب Apidog اليوم&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;الأهم عمليًا: هذه الزيادة تأتي بعد مضاعفة حدود نافذة الخمس ساعات في الأسبوع السابق. النتيجة هي سعة أكبر على مستويين في الوقت نفسه: 2x للنافذة القصيرة، و1.5x للسقف الأسبوعي، دون تغيير في السعر. خلال هذه الفترة يمكنك تشغيل جلسات Claude Code أطول، وتجربة وكلاء أكثر استهلاكًا للتوكنات، وتنفيذ مهام API كاملة بدل تقسيمها يدويًا على عدة جلسات.&lt;/p&gt;

&lt;p&gt;تشرح هذه المقالة ما تغيّر، كيف تقيس استخدامك، وما workflows التي تستحق استغلال السعة الإضافية فيها، خصوصًا عند بناء واجهات API باستخدام Apidog.&lt;/p&gt;

&lt;h2&gt;
  
  
  ما هي الحدود الأسبوعية، وماذا تعني زيادة 50%
&lt;/h2&gt;

&lt;p&gt;يستخدم Claude Code في الخطط المدفوعة نموذج حدود من مستويين:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;حدود الخمس ساعات&lt;/strong&gt;: سقف متجدد للتوكنات داخل أي نافذة مدتها 5 ساعات. يظهر أثره في الجلسات الطويلة مثل إعادة الهيكلة، إصلاح الأخطاء، أو بناء ميزة كاملة.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;الحدود الأسبوعية&lt;/strong&gt;: سقف إجمالي للتوكنات على مدار الأسبوع. هذا هو الحد الذي يصطدم به المستخدمون المتقدمون بعد عدة أيام من العمل المكثف.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;لا تنشر Anthropic أرقام التوكنات الثابتة لكل خطة، وقد تعدّلها حسب السعة. لكن عمليًا:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;مستخدمو &lt;strong&gt;Pro&lt;/strong&gt; يحصلون على مساحة أكبر قبل ظهور قيود الإخراج قرب نهاية الأسبوع.&lt;/li&gt;
&lt;li&gt;مستخدمو &lt;strong&gt;Max&lt;/strong&gt; يمكنهم تشغيل جلسات عمل عميقة لعدة أيام على قاعدة أكواد كبيرة.&lt;/li&gt;
&lt;li&gt;مستخدمو &lt;strong&gt;Team والخطط المؤسسية القائمة على المقاعد&lt;/strong&gt; يحصلون على زيادة 50% لكل مقعد. في فريق من 10 مقاعد، هذا يعني زيادة كبيرة في السعة الأسبوعية الإجمالية.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;للتحقق من السقف الحالي، استخدم:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/usage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;داخل Claude Code CLI، أو راقب شريط الحالة في إضافة IDE، أو صفحة إعدادات الحساب على الويب.&lt;/p&gt;

&lt;h2&gt;
  
  
  لماذا تقوم Anthropic بذلك الآن
&lt;/h2&gt;

&lt;p&gt;هناك سببان مهمان:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;السعة&lt;/strong&gt;: أضافت Anthropic قدرات حوسبة جديدة خلال الربعين الأول والثاني من عام 2026. عندما تتوفر سعة إضافية، يكون رفع حدود المستخدمين الحاليين طريقة مباشرة لاختبار الطلب وزيادة اعتمادهم على المنصة.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;المنافسة&lt;/strong&gt;: أطلقت Codex حلقة الوكيل المستقل &lt;a href="http://apidog.com/blog/goal-command-codex-claude-code-autonomous-agents?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;&lt;code&gt;/goal&lt;/code&gt;&lt;/a&gt; قبل أسابيع، كما بدأت OpenAI بزيادة حدود بعض خطط المطورين. لذلك تبدو زيادة Claude Code خطوة للحفاظ على فرق الهندسة التي بدأت تقسم مهامها بين أكثر من مزود.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;المهم: هذه الزيادة مؤقتة. تنتهي في 13 يوليو الساعة 6 مساءً بتوقيت المحيط الهادئ الصيفي. لم تعلن Anthropic إن كانت ستجعل السقف الجديد دائمًا أو تعيده إلى الوضع السابق.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feayrrgo0qneuc8vxxp9u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feayrrgo0qneuc8vxxp9u.png" alt="Claude Code usage increase" width="800" height="798"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ما الذي تفتحه الزيادة بنسبة 50% فعليًا
&lt;/h2&gt;

&lt;p&gt;بدل التفكير فيها كـ "استخدام أكثر"، تعامل معها كفرصة لتجربة workflows كانت سابقًا مكلفة جدًا من ناحية التوكنات.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. تشغيل الوكلاء لفترة أطول
&lt;/h3&gt;

&lt;p&gt;بعد مضاعفة حد الخمس ساعات وزيادة السقف الأسبوعي، يمكن لحلقة الوكيل المستقل &lt;a href="http://apidog.com/blog/goal-command-codex-claude-code-autonomous-agents?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;&lt;code&gt;/goal&lt;/code&gt;&lt;/a&gt; العمل لفترة أطول قبل الوصول إلى الحد.&lt;/p&gt;

&lt;p&gt;مثال هدف عملي:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/goal
Refactor the authentication module to remove duplicated session logic.
Success criteria:
- All existing tests pass.
- No public API behavior changes.
- Add integration tests for login, refresh, and logout.
- Update docs where behavior is clarified.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;قبل الزيادة، قد تضطر لإيقاف هذا النوع من العمل بسبب حدود الجلسة أو السقف الأسبوعي. الآن يمكنك ترك Claude Code يعمل عبر دورة أطول: قراءة الملفات، تعديل الكود، تشغيل الاختبارات، إصلاح الفشل، ثم التكرار.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. تحميل سياق أكبر من قاعدة الأكواد
&lt;/h3&gt;

&lt;p&gt;قيمة Claude Code ترتفع عندما يفهم مساحة أكبر من المشروع. مع السعة الجديدة يمكنك:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;تحميل مجلدات أعمق داخل monorepo.&lt;/li&gt;
&lt;li&gt;السماح للوكيل بقراءة ملفات اختبار، docs، وconfig بدل الاكتفاء بالملف الحالي.&lt;/li&gt;
&lt;li&gt;تقليل التحديد اليدوي للنطاق فقط لتوفير التوكنات.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;مثال workflow مناسب:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ثم داخل الجلسة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;اقرأ بنية packages/api وpackages/shared.
حدد نقاط التكرار بين validators وDTOs.
اقترح خطة refactor قبل تعديل أي ملف.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;بعد مراجعة الخطة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;نفّذ الخطة على مراحل صغيرة.
بعد كل مرحلة شغّل الاختبارات ذات الصلة واصلح الفشل.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. تشغيل سير عمل متعدد الوكلاء
&lt;/h3&gt;

&lt;p&gt;أدوات مثل &lt;a href="http://apidog.com/blog/ruflo-multi-agent-claude-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Ruflo، منسق الوكلاء المتعددين فوق Claude Code&lt;/a&gt;، تشغّل عدة نسخ من Claude على نفس المهمة ثم تدمج النتائج. هذا يستهلك الحصة بسرعة لأنك لا تشغّل وكيلًا واحدًا، بل 3 إلى 5 وكلاء بالتوازي.&lt;/p&gt;

&lt;p&gt;مع السقف الجديد، تصبح هذه التجارب أكثر قابلية للاستخدام اليومي، مثل:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;وكيل يكتب التنفيذ.&lt;/li&gt;
&lt;li&gt;وكيل يراجع الأمان.&lt;/li&gt;
&lt;li&gt;وكيل يكتب الاختبارات.&lt;/li&gt;
&lt;li&gt;وكيل يتحقق من التوافق مع التصميم أو مواصفة API.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. استخدام أثقل لخوادم MCP
&lt;/h3&gt;

&lt;p&gt;يستدعي Claude Code أدوات خارجية عبر &lt;a href="http://apidog.com/blog/mcp-server-testing-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;بروتوكول سياق النموذج MCP&lt;/a&gt;، وتُحسب هذه الاستدعاءات ضمن الحصة. إذا كنت تؤجل ربط خوادم MCP بسبب الاستهلاك، فالوقت مناسب لتجربتها.&lt;/p&gt;

&lt;p&gt;أمثلة على خوادم MCP مفيدة:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;الوصول إلى قاعدة بيانات محلية للقراءة.&lt;/li&gt;
&lt;li&gt;تشغيل اختبارات API.&lt;/li&gt;
&lt;li&gt;أتمتة المتصفح.&lt;/li&gt;
&lt;li&gt;فرز GitHub issues.&lt;/li&gt;
&lt;li&gt;قراءة logs أو traces.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;مثال طلب عملي:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;استخدم خادم MCP الخاص بالاختبارات لتشغيل اختبارات endpoint /users.
إذا فشل اختبار، اقرأ الاستجابة، حدّد سبب عدم تطابق العقد، وعدّل الكود أو المواصفة حسب الحاجة.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;إذا واجهت مشكلة إعداد في Claude Code، راجع &lt;a href="http://apidog.com/blog/fix-invalid-custom3p-enterprise-config-claude-code?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;إصلاح تكوين المؤسسة custom3p غير الصالح&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخطة العملية للأسابيع الثمانية القادمة
&lt;/h2&gt;

&lt;p&gt;لديك حتى 13 يوليو. لا تستخدم الزيادة بشكل عشوائي؛ استخدمها لاختبار workflows ذات قيمة حقيقية.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. شغّل workflow الوكيل الذي كنت تؤجله
&lt;/h3&gt;

&lt;p&gt;إذا كان لديك workflow قائم على &lt;code&gt;/goal&lt;/code&gt; أو متعدد الوكلاء وكان قريبًا من أن يصبح عمليًا ضمن الحدود القديمة، ابنِه الآن.&lt;/p&gt;

&lt;p&gt;ابدأ بمهمة واحدة واضحة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/goal
Migrate the billing module from callbacks to async/await.
Success criteria:
- No behavior changes.
- Unit tests pass.
- Add regression tests for failed payments.
- Keep public function signatures unchanged unless necessary.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;بعد انتهاء المهمة، سجّل:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;كم استهلكت من الحصة؟&lt;/li&gt;
&lt;li&gt;كم مرة احتجت للتدخل؟&lt;/li&gt;
&lt;li&gt;هل النتيجة أفضل من تنفيذها يدويًا؟&lt;/li&gt;
&lt;li&gt;هل تحتاج خطة أعلى إذا انتهت الزيادة؟&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. انقل المهام الجانبية إلى Claude Code
&lt;/h3&gt;

&lt;p&gt;مهام كانت تُنفّذ يدويًا يمكن الآن نقلها إلى Claude Code دون استنزاف السقف بسرعة، مثل:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;كتابة ملفات &lt;a href="http://AGENTS.md" rel="noopener noreferrer"&gt;AGENTS.md&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;مراجعة pull requests.&lt;/li&gt;
&lt;li&gt;إنشاء مواصفات OpenAPI.&lt;/li&gt;
&lt;li&gt;إعداد خوادم MCP.&lt;/li&gt;
&lt;li&gt;تلخيص بنية مشروع قديم.&lt;/li&gt;
&lt;li&gt;كتابة اختبارات تكامل.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;للبدء السريع، راجع &lt;a href="http://apidog.com/blog/how-to-write-agents-md-files?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل كتابة ملفات AGENTS.md&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;مثال prompt لإنشاء ملف AGENTS.md:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;أنشئ ملف AGENTS.md لهذا المستودع.
يجب أن يتضمن:
- أوامر التثبيت والتشغيل والاختبار.
- قواعد تنسيق الكود.
- حدود ما يجب على الوكيل تعديله.
- خطوات التحقق قبل فتح pull request.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. اختبر السقف الجديد بصدق
&lt;/h3&gt;

&lt;p&gt;استخدم Claude Code كما لو أن الحدود الجديدة دائمة. الهدف ليس فقط الاستفادة المؤقتة، بل جمع بيانات قرار:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;هل تكفيك خطة Pro بعد الزيادة؟&lt;/li&gt;
&lt;li&gt;هل تحتاج Max؟&lt;/li&gt;
&lt;li&gt;هل من الأفضل تقسيم العمل بين أكثر من مزود؟&lt;/li&gt;
&lt;li&gt;ما المهام التي تستهلك الحصة دون عائد واضح؟&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;استخدم &lt;code&gt;/usage&lt;/code&gt; عدة مرات خلال الأسبوع وسجّل النتائج في ملف بسيط:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Claude Code usage log&lt;/span&gt;

&lt;span class="gu"&gt;## Week 1&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Main tasks:
&lt;span class="p"&gt;-&lt;/span&gt; Agents used:
&lt;span class="p"&gt;-&lt;/span&gt; API work:
&lt;span class="p"&gt;-&lt;/span&gt; Reached warning? yes/no
&lt;span class="p"&gt;-&lt;/span&gt; Notes:

&lt;span class="gu"&gt;## Week 2&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Main tasks:
&lt;span class="p"&gt;-&lt;/span&gt; Agents used:
&lt;span class="p"&gt;-&lt;/span&gt; API work:
&lt;span class="p"&gt;-&lt;/span&gt; Reached warning? yes/no
&lt;span class="p"&gt;-&lt;/span&gt; Notes:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  أين يدخل عمل واجهات API
&lt;/h2&gt;

&lt;p&gt;بالنسبة لمهندسي backend والمنصات، أفضل استخدام للسعة الإضافية هو عمل API. السبب أن مهام API تستهلك توكنات كثيرة لأنها تحتاج إلى:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;قراءة handlers.&lt;/li&gt;
&lt;li&gt;فهم models وDTOs.&lt;/li&gt;
&lt;li&gt;مقارنة التنفيذ مع OpenAPI.&lt;/li&gt;
&lt;li&gt;تشغيل اختبارات تكامل.&lt;/li&gt;
&lt;li&gt;إصلاح اختلافات العقد.&lt;/li&gt;
&lt;li&gt;تكرار cycle التنفيذ والاختبار.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Workflow عملي باستخدام Apidog وClaude Code
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;صمّم عقد API في &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
عرّف endpoints، مخططات الطلب والاستجابة، وأمثلة payload. اجعل Apidog مصدر الحقيقة.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;صدّر مواصفة OpenAPI.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
أعطِ الملف لـ Claude Code كسياق داخل المشروع.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;اطلب من Claude Code التنفيذ مقابل المواصفة.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
مثال:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/goal
Implement the API described in openapi.yaml.
Success criteria:
- Every endpoint in the spec has a handler.
- Request validation matches the schema.
- Response shape matches the examples.
- Existing tests pass.
- Add integration tests for all 2xx and 4xx cases.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;شغّل اختبارات Apidog CLI كمدقق.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
استخدم &lt;a href="http://apidog.com/blog/api-testing-tool-qa-engineers?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;اختبارات Apidog CLI&lt;/a&gt; للتأكد أن التنفيذ يطابق العقد الحقيقي، لا افتراضات الوكيل.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;اجعل Claude Code يصلح الفشل بناءً على نتائج الاختبار.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;هذه نتائج اختبار Apidog CLI.
حلل كل فشل.
إذا كان الخطأ في التنفيذ، عدّل الكود.
إذا كان الخطأ في المواصفة، اشرح السبب ولا تعدّلها دون موافقة.
أعد تشغيل الاختبارات بعد كل إصلاح.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;بهذا الشكل يصبح Claude Code جزءًا من loop تصميم وتنفيذ واختبار API، وليس مجرد مساعد يكتب snippets منفصلة.&lt;/p&gt;

&lt;p&gt;لشرح أعمق لفلسفة contract-first مع وكلاء الذكاء الاصطناعي، راجع &lt;a href="http://apidog.com/blog/api-platform-design-first-api-workflow?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل سير عمل واجهة برمجة التطبيقات بالاعتماد على التصميم أولاً&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;إذا لم تستخدم Apidog من قبل، يمكنك &lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;تنزيل Apidog&lt;/a&gt; وتجربة workflow التصميم أولاً مع حصة Claude Code الإضافية.&lt;/p&gt;

&lt;h2&gt;
  
  
  ماذا عن الوصول المجاني إلى واجهة برمجة تطبيقات Claude؟
&lt;/h2&gt;

&lt;p&gt;إذا كنت لا تريد الدفع مقابل خطة Claude Code، فهناك مسارات منفصلة للوصول إلى Claude API. يشرح &lt;a href="http://apidog.com/blog/get-free-unlimited-claude-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;دليل الوصول المجاني إلى واجهة برمجة تطبيقات Claude&lt;/a&gt; الخيارات التي تقدمها Anthropic وشركاؤها.&lt;/p&gt;

&lt;p&gt;لكن هذه المسارات منفصلة عن حصة Claude Code المدفوعة. زيادة 50% تنطبق فقط على:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pro&lt;/li&gt;
&lt;li&gt;Max&lt;/li&gt;
&lt;li&gt;Team&lt;/li&gt;
&lt;li&gt;الخطط المؤسسية القائمة على المقاعد&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ولا تغيّر حدود Claude API المباشرة.&lt;/p&gt;

&lt;h2&gt;
  
  
  ما الذي لا يغيّره هذا التحديث
&lt;/h2&gt;

&lt;p&gt;هذا التحديث لا يقوم بـ:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;تغيير حدود معدل Claude API للمستخدمين الذين يستدعون API مباشرة.&lt;/li&gt;
&lt;li&gt;تغيير الأسعار في أي مستوى.&lt;/li&gt;
&lt;li&gt;إضافة ميزات جديدة إلى Claude Code نفسه.&lt;/li&gt;
&lt;li&gt;تغيير آلية الفوترة في &lt;a href="http://apidog.com/blog/github-copilot-usage-billing-api-teams?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;الخطط المؤسسية القائمة على المقاعد&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;إنها زيادة في سقف الاستخدام فقط. القيمة الحقيقية تعتمد على كيفية استغلالك للمساحة الإضافية.&lt;/p&gt;

&lt;h2&gt;
  
  
  الأسئلة الشائعة
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;متى تنتهي الزيادة بنسبة 50%؟&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
تنتهي في 13 يوليو 2026 الساعة 6 مساءً بتوقيت المحيط الهادئ الصيفي، أي 1 صباحًا بتوقيت جرينتش في 14 يوليو. بعد ذلك لم تعلن Anthropic ما إذا كان السقف سيعود إلى الأساس أو سيستمر.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;هل أحتاج إلى تفعيلها يدويًا؟&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
لا. الحدود مرفوعة بالفعل في حسابك. استخدم الأمر التالي داخل Claude Code CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/usage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;هل تنطبق زيادة 50% على حد الخمس ساعات؟&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
لا. زيادة 50% تخص الحد الأسبوعي. أما حد الخمس ساعات فقد تمت مضاعفته بشكل منفصل في الأسبوع السابق. كلاهما سارٍ حتى 13 يوليو.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ماذا يحدث إذا قمت بالترقية أثناء الفترة؟&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
لم تنشر Anthropic تفاصيل محددة حول هذا السيناريو. عادةً تنطبق حدود الخطة الجديدة من لحظة الترقية، لكن تعامل مع ذلك كافتراض إلى أن تصدر الشركة توضيحًا رسميًا.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;هل يؤثر هذا على Claude API؟&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
لا. التغيير خاص بخطط Claude Code فقط. إذا كنت تستدعي Claude عبر Anthropic API مباشرة، فحدود المعدل الخاصة بك تُدار بشكل منفصل.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;هل ستصبح الزيادة دائمة؟&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
غير معروف. تعامل مع الأسابيع القادمة كتجربة إنتاجية: اختبر workflows حقيقية، سجّل الاستهلاك، ثم قرر هل تحتاج سقفًا أعلى بعد انتهاء الفترة أم لا.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>كيفية اختبار واجهات برمجة تطبيقات راست (Rust API)؟</title>
      <dc:creator>Yusuf Khalidd</dc:creator>
      <pubDate>Wed, 13 May 2026 08:49:06 +0000</pubDate>
      <link>https://forem.com/yusuf_khalidd/kyfy-khtbr-wjht-brmj-ttbyqt-rst-rust-api-4d28</link>
      <guid>https://forem.com/yusuf_khalidd/kyfy-khtbr-wjht-brmj-ttbyqt-rst-rust-api-4d28</guid>
      <description>&lt;p&gt;لغة Rust تمنحك خادم HTTP سريعًا وآمنًا من حيث الأنواع بسرعة، لكنها لا تمنحك دائمًا حلقة تغذية راجعة سريعة لاختبار عقد الـ API. &lt;code&gt;cargo test&lt;/code&gt; مهم، لكنه يدور حول الكود لا حول HTTP الفعلي. لاختبار أكواد الحالة، شكل JSON، الرؤوس، JWT، وطلبات الواجهة الأمامية قبل اكتمال المعالج، تحتاج أداة تعمل خارج سلسلة أدوات Rust وتتحدث مع الخادم قيد التشغيل.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation" class="crayons-btn crayons-btn--primary"&gt;جرّب Apidog اليوم&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;هذا الدليل يوضح سير عمل عملي لاختبار واجهة برمجة تطبيقات Rust داخل &lt;a href="https://apidog.com?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;Apidog&lt;/a&gt;: توصيل Apidog بخادم Axum أو Actix، إنشاء طلبات، التحقق من JSON المُسلسل بواسطة Serde، التعامل مع JWT، إنشاء mocks للواجهة الأمامية، ثم تشغيل كل ذلك في CI. إذا كنت تستخدم Postman أو &lt;code&gt;curl&lt;/code&gt;، فستحصل أيضًا على مواصفات OpenAPI، عناوين mock قابلة للمشاركة، وبيئات عمل جماعية. يمكنك قراءة &lt;a href="http://apidog.com/blog/api-testing-without-postman-2026?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;قصة ترحيل Postman&lt;/a&gt; لاحقًا؛ هنا نركز على Rust.&lt;/p&gt;

&lt;h2&gt;
  
  
  ملخص سريع
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;شغّل خادم Rust محليًا باستخدام &lt;code&gt;cargo run&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;أضف &lt;code&gt;http://localhost:3000&lt;/code&gt; كـ &lt;code&gt;baseUrl&lt;/code&gt; في بيئة Apidog.&lt;/li&gt;
&lt;li&gt;أنشئ طلب &lt;code&gt;GET /healthz&lt;/code&gt; كاختبار دخان.&lt;/li&gt;
&lt;li&gt;اختبر JSON القادم من Serde باستخدام assertions بعد كل طلب.&lt;/li&gt;
&lt;li&gt;خزّن JWT في متغير &lt;code&gt;{{token}}&lt;/code&gt; وطبّق Bearer Auth على مستوى المجلد.&lt;/li&gt;
&lt;li&gt;استخدم Mock endpoints حتى تعمل الواجهة الأمامية قبل اكتمال المعالج.&lt;/li&gt;
&lt;li&gt;احفظ الطلبات كسيناريو اختبار وشغّلها في CI باستخدام &lt;code&gt;apidog-cli&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  لماذا تختبر Rust API خارج &lt;code&gt;cargo test&lt;/code&gt;؟
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;cargo test&lt;/code&gt; ممتاز لاختبارات الوحدة والتكامل داخل Rust، لكنه ليس دائمًا أفضل طبقة لاختبار عقد HTTP العام.&lt;/p&gt;

&lt;p&gt;إذا أردت التأكد من أن المعالج يعيد:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Status code صحيحًا&lt;/li&gt;
&lt;li&gt;JSON بالشكل المتوقع&lt;/li&gt;
&lt;li&gt;Headers صحيحة&lt;/li&gt;
&lt;li&gt;رسالة خطأ واضحة عند الإدخال غير الصحيح&lt;/li&gt;
&lt;li&gt;سلوكًا ثابتًا أمام الواجهة الأمامية&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;فستحتاج عادة إلى كتابة اختبارات HTTP داخل Rust أو استخدام &lt;code&gt;curl&lt;/code&gt; يدويًا. هذا يعمل، لكنه يصبح مكلفًا مع تغيّر المعالجات.&lt;/p&gt;

&lt;p&gt;Apidog يضيف طبقة عقد فوق الخادم قيد التشغيل:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;الطلبات محفوظة وقابلة لإعادة التشغيل.&lt;/li&gt;
&lt;li&gt;التأكيدات موجودة بجانب الطلب.&lt;/li&gt;
&lt;li&gt;الفريق كله يرى نفس العقود.&lt;/li&gt;
&lt;li&gt;يمكن تشغيل نفس السيناريو في CI.&lt;/li&gt;
&lt;li&gt;يمكن توليد OpenAPI من الطلبات المحفوظة.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;الفكرة: اترك &lt;code&gt;cargo test&lt;/code&gt; لاختبار كود Rust، واستخدم Apidog لاختبار واجهة HTTP كما يراها العملاء.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخطوة 1: أضف خادم Rust كبيئة في Apidog
&lt;/h2&gt;

&lt;p&gt;ابدأ بخادم Axum بسيط:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;axum&lt;/span&gt;&lt;span class="p"&gt;::{&lt;/span&gt;&lt;span class="nn"&gt;routing&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;tokio&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;net&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;TcpListener&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;#[tokio::main]&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/healthz"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(||&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s"&gt;"ok"&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;

    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;listener&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;TcpListener&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"0.0.0.0:3000"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="k"&gt;.await&lt;/span&gt;&lt;span class="nf"&gt;.unwrap&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="nn"&gt;axum&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;serve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="k"&gt;.await&lt;/span&gt;&lt;span class="nf"&gt;.unwrap&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;شغّله:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cargo run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;في Apidog:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;أنشئ مشروعًا جديدًا.&lt;/li&gt;
&lt;li&gt;افتح إدارة البيئات.&lt;/li&gt;
&lt;li&gt;أضف بيئة باسم &lt;code&gt;Rust Local&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;المتغير&lt;/th&gt;
&lt;th&gt;القيمة&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;baseUrl&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;http://localhost:3000&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;token&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;اتركها فارغة الآن&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;apiVersion&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;أضف بيئة ثانية باسم &lt;code&gt;Rust Staging&lt;/code&gt; واستخدم عنوان URL التجريبي. بهذه الطريقة يمكنك التبديل بين المحلي والتجريبي بدون تعديل كل طلب يدويًا.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخطوة 2: أنشئ أول طلب
&lt;/h2&gt;

&lt;p&gt;داخل المشروع، أنشئ مجلدًا باسم &lt;code&gt;Rust API&lt;/code&gt;، ثم أضف طلبًا جديدًا:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Method: &lt;code&gt;GET&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;URL: &lt;code&gt;{{baseUrl}}/healthz&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;اضغط &lt;strong&gt;Send&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;النتيجة المتوقعة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;200 OK
ok
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;احفظ الطلب باسم:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;health-check
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;هذا الطلب هو أبسط اختبار دخان. إذا فشل، لا تكمل بقية الاختبارات قبل إصلاح الاتصال بالخادم.&lt;/p&gt;

&lt;p&gt;إذا ظهر خطأ &lt;code&gt;connection refused&lt;/code&gt;، تحقق من:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;أن الخادم يعمل.&lt;/li&gt;
&lt;li&gt;أن المنفذ صحيح.&lt;/li&gt;
&lt;li&gt;أن الخادم مربوط بـ &lt;code&gt;0.0.0.0:3000&lt;/code&gt; وليس فقط &lt;code&gt;127.0.0.1:3000&lt;/code&gt;، خصوصًا إذا كنت تستخدم Docker أو بيئة محلية مختلفة.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  الخطوة 3: اختبر طلب واستجابة JSON باستخدام Serde
&lt;/h2&gt;

&lt;p&gt;أضف مسارًا لإنشاء مستخدم:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;axum&lt;/span&gt;&lt;span class="p"&gt;::{&lt;/span&gt;&lt;span class="nn"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;routing&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;serde&lt;/span&gt;&lt;span class="p"&gt;::{&lt;/span&gt;&lt;span class="n"&gt;Deserialize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Serialize&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nd"&gt;#[derive(Deserialize)]&lt;/span&gt;
&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;CreateUser&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;#[derive(Serialize)]&lt;/span&gt;
&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;create_user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;Json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="n"&gt;Json&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;CreateUser&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Json&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;Json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="py"&gt;.name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="py"&gt;.email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="nf"&gt;.route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/users"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;create_user&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;في Apidog، أنشئ طلبًا جديدًا:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Method: &lt;code&gt;POST&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;URL: &lt;code&gt;{{baseUrl}}/users&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Body: JSON
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ada Lovelace"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ada@example.com"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;أرسل الطلب واحفظه باسم:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;create-user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;أضف assertions في تبويب &lt;strong&gt;Tests&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Status is 200&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;eql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Body has id, name, email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;have&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;eql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Ada Lovelace&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;[^&lt;/span&gt;&lt;span class="sr"&gt;@&lt;/span&gt;&lt;span class="se"&gt;]&lt;/span&gt;&lt;span class="sr"&gt;+@&lt;/span&gt;&lt;span class="se"&gt;[^&lt;/span&gt;&lt;span class="sr"&gt;@&lt;/span&gt;&lt;span class="se"&gt;]&lt;/span&gt;&lt;span class="sr"&gt;+$/&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;الآن إذا تغيّر شكل الاستجابة لاحقًا بسبب &lt;code&gt;serde&lt;/code&gt;، مثل إضافة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="nd"&gt;#[serde(rename_all&lt;/span&gt; &lt;span class="nd"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"camelCase"&lt;/span&gt;&lt;span class="nd"&gt;)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;فسيفشل اختبار العقد قبل أن يصل التغيير إلى الإنتاج.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخطوة 4: غطِّ حالات رفض Serde
&lt;/h2&gt;

&lt;p&gt;لا تختبر المسار السعيد فقط. اختبر المدخلات الخاطئة أيضًا.&lt;/p&gt;

&lt;p&gt;أنشئ الطلبات التالية في Apidog:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;الطلب&lt;/th&gt;
&lt;th&gt;Body&lt;/th&gt;
&lt;th&gt;المتوقع&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;create-user-missing-email&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{ "name": "Ada" }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;422&lt;/code&gt;، مع رسالة عن الحقل المفقود&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;create-user-extra-field&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{ "name": "Ada", "email": "a@b.c", "admin": true }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;200&lt;/code&gt; إذا لم تستخدم &lt;code&gt;deny_unknown_fields&lt;/code&gt;، أو &lt;code&gt;422&lt;/code&gt; إذا استخدمته&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;create-user-wrong-type&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{ "name": 1, "email": "a@b.c" }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;422&lt;/code&gt;، مع رسالة عن النوع غير الصحيح&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;مثال assertion:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Status is 422&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;eql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;422&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;هذه الاختبارات توثق سياسة التحقق الفعلية. إذا قررت لاحقًا إضافة:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="nd"&gt;#[serde(deny_unknown_fields)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;فسيتغير سلوك &lt;code&gt;extra-field&lt;/code&gt;، وسيظهر ذلك فورًا في Apidog وCI.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخطوة 5: اختبر المسارات المحمية بواسطة JWT
&lt;/h2&gt;

&lt;p&gt;غالبًا ما تكون واجهات Rust الإنتاجية محمية بطبقة مصادقة. مثال مبسط باستخدام JWT:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;axum&lt;/span&gt;&lt;span class="p"&gt;::{&lt;/span&gt;&lt;span class="n"&gt;Json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;http&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;StatusCode&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;axum_extra&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;cookie&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;PrivateCookieJar&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;jsonwebtoken&lt;/span&gt;&lt;span class="p"&gt;::{&lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;DecodingKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Validation&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;me&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;PrivateCookieJar&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Result&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Json&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;StatusCode&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jar&lt;/span&gt;
        &lt;span class="nf"&gt;.get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"token"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;.ok_or&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;StatusCode&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;UNAUTHORIZED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;claims&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Claims&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="nf"&gt;.value&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
        &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nn"&gt;DecodingKey&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;from_secret&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;b"secret"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nn"&gt;Validation&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;default&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;.map_err&lt;/span&gt;&lt;span class="p"&gt;(|&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="nn"&gt;StatusCode&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="n"&gt;UNAUTHORIZED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nf"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;Json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;claims&lt;/span&gt;&lt;span class="py"&gt;.claims.sub&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Ada"&lt;/span&gt;&lt;span class="nf"&gt;.into&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
        &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"ada@example.com"&lt;/span&gt;&lt;span class="nf"&gt;.into&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="p"&gt;}))&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;بدل إنشاء JWT يدويًا لكل طلب، أضف &lt;strong&gt;Pre-Request Script&lt;/strong&gt; على مستوى المجلد في Apidog:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jwt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;jsonwebtoken&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;exp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3600&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;secret&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;token&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ثم من إعدادات المجلد:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auth Type: &lt;code&gt;Bearer Token&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Token: &lt;code&gt;{{token}}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;الآن ترث كل الطلبات داخل المجلد نفس إعداد المصادقة، ويتم توليد JWT جديد قبل التشغيل.&lt;/p&gt;

&lt;p&gt;للمزيد حول اختبار JWT، راجع &lt;a href="http://apidog.com/blog/test-jwt-authentication-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;كيفية اختبار مصادقة JWT في واجهات برمجة التطبيقات&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخطوة 6: اختبر Streaming و Server-Sent Events
&lt;/h2&gt;

&lt;p&gt;يدعم Axum وActix التدفق كجزء أساسي من HTTP. في Axum، يمكن أن يعيد المعالج &lt;code&gt;Sse&lt;/code&gt; مبنيًا على &lt;code&gt;futures::Stream&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;تنسيق SSE عادة يكون:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data: { ... }

data: { ... }

event: done
data: {}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;في Apidog:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;أنشئ طلب &lt;code&gt;GET&lt;/code&gt; لنقطة SSE.&lt;/li&gt;
&lt;li&gt;أرسله.&lt;/li&gt;
&lt;li&gt;إذا كان &lt;code&gt;Content-Type&lt;/code&gt; هو &lt;code&gt;text/event-stream&lt;/code&gt;، ستظهر الاستجابة في وضع streaming.&lt;/li&gt;
&lt;li&gt;راقب كل frame مع زمن وصوله.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ما يجب اختباره:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;أول event يصل ضمن الزمن المتوقع.&lt;/li&gt;
&lt;li&gt;event معين مثل &lt;code&gt;event: done&lt;/code&gt; يصل قبل إغلاق الاتصال.&lt;/li&gt;
&lt;li&gt;الاتصال لا يبقى مفتوحًا للأبد.&lt;/li&gt;
&lt;li&gt;يمكن ضبط timeout للطلب حتى يفشل الاختبار عند التدفق غير المنتهي.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;إذا كنت تستخدم WebSocket بدل SSE، استخدم نوع طلب WebSocket في Apidog واحفظ تسلسل الرسائل والاستجابات بنفس الفكرة.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخطوة 7: أنشئ Mock API لتطوير الواجهة الأمامية بالتوازي
&lt;/h2&gt;

&lt;p&gt;الواجهة الأمامية لا تحتاج انتظار اكتمال كل معالج Rust. يمكنها العمل ضد mock ثابت طالما أن العقد واضح.&lt;/p&gt;

&lt;p&gt;في Apidog:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;افتح طلب &lt;code&gt;create-user&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;اختر &lt;strong&gt;Smart Mock&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;فعّله.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;سيُنشئ Apidog endpoint مثل:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://mock.apidog.com/m1/&amp;lt;projectId&amp;gt;/users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ويمكن للواجهة الأمامية إرسال &lt;code&gt;POST&lt;/code&gt; إليه بنفس شكل الطلب الحقيقي.&lt;/p&gt;

&lt;p&gt;لـ mock ديناميكي، استخدم &lt;strong&gt;Advanced Mock&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;createdAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toISOString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;النتيجة: الواجهة الأمامية تحصل على &lt;code&gt;id&lt;/code&gt; و&lt;code&gt;createdAt&lt;/code&gt; واقعيين بدون انتظار معالج Rust.&lt;/p&gt;

&lt;p&gt;عندما يصبح المعالج جاهزًا، تغيّر الواجهة الأمامية &lt;code&gt;baseUrl&lt;/code&gt; من mock إلى:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ولا تحتاج لتغيير شكل الطلب.&lt;/p&gt;

&lt;p&gt;لنفس النمط في بيئات أخرى، راجع &lt;a href="http://apidog.com/blog/test-spring-boot-api?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;بناء واختبار واجهة برمجة تطبيقات Spring Boot&lt;/a&gt; و&lt;a href="http://apidog.com/blog/how-to-test-an-api-with-apidog?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;سير عمل اختبار واجهة برمجة التطبيقات العام&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخطوة 8: احفظ الطلبات كسيناريو CI
&lt;/h2&gt;

&lt;p&gt;حوّل الطلبات إلى سيناريو اختبار قابل للتشغيل بدون واجهة رسومية.&lt;/p&gt;

&lt;p&gt;مثال تسلسل:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;health-check&lt;/code&gt;&lt;br&gt;&lt;br&gt;
تأكيد &lt;code&gt;200&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;create-user&lt;/code&gt;&lt;br&gt;&lt;br&gt;
تأكيد &lt;code&gt;200&lt;/code&gt;، ثم خزّن &lt;code&gt;body.id&lt;/code&gt; في متغير.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;create-user-missing-email&lt;/code&gt;&lt;br&gt;&lt;br&gt;
تأكيد &lt;code&gt;422&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;me&lt;/code&gt;&lt;br&gt;&lt;br&gt;
يستخدم JWT من Pre-Request Script، ثم يؤكد &lt;code&gt;200&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;طلب SSE&lt;br&gt;&lt;br&gt;
يؤكد أن التدفق يكتمل خلال 5 ثوانٍ.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;مثال لتخزين &lt;code&gt;id&lt;/code&gt; بعد إنشاء المستخدم:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;userId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ثم يمكن استخدامه لاحقًا:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Returned id matches created user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;eql&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;userId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;صدّر السيناريو كملف JSON وضعه في المستودع:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tests/apidog/contract.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;مثال GitHub Actions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run API contract tests&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;cargo build --release&lt;/span&gt;
    &lt;span class="s"&gt;./target/release/myserver &amp;amp;&lt;/span&gt;
    &lt;span class="s"&gt;sleep 2&lt;/span&gt;
    &lt;span class="s"&gt;apidog-cli run tests/apidog/contract.json --env "Rust Local"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;الآن كل Pull Request يلمس معالجًا يحصل على اختبار عقد فعلي ضد binary قيد التشغيل.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخطوة 9: أنشئ OpenAPI من الطلبات المحفوظة
&lt;/h2&gt;

&lt;p&gt;بعد استقرار الطلبات:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;افتح قائمة &lt;strong&gt;Export&lt;/strong&gt; في Apidog.&lt;/li&gt;
&lt;li&gt;اختر OpenAPI 3.1.&lt;/li&gt;
&lt;li&gt;صدّر المواصفة.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ستحصل على ملف مواصفات مبني من الطلبات والأمثلة التي اختبرتها فعليًا.&lt;/p&gt;

&lt;p&gt;يمكنك أيضًا تشغيل التصدير من CI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apidog-cli &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; openapi &lt;span class="nt"&gt;--output&lt;/span&gt; openapi.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ثم أضف &lt;code&gt;openapi.json&lt;/code&gt; إلى المستودع حتى يستخدمه من يحتاج إلى توليد عملاء TypeScript أو Swift أو Kotlin أو Python.&lt;/p&gt;

&lt;h2&gt;
  
  
  الأسئلة الشائعة
&lt;/h2&gt;

&lt;h3&gt;
  
  
  هل يعمل Apidog مع Axum وActix-web؟
&lt;/h3&gt;

&lt;p&gt;نعم. Apidog يتعامل مع HTTP، لذلك يعمل مع Axum وActix-web وRocket وWarp وPoem وLoco. النقطة المهمة في التطوير المحلي هي ربط الخادم بـ &lt;code&gt;0.0.0.0&lt;/code&gt; عند الحاجة.&lt;/p&gt;

&lt;h3&gt;
  
  
  كيف أختبر المعالجات التي تتعطل؟
&lt;/h3&gt;

&lt;p&gt;يمكنك وضع &lt;code&gt;CatchPanicLayer&lt;/code&gt; من &lt;code&gt;tower-http&lt;/code&gt; أمام الـ router لتحويل panic إلى &lt;code&gt;500&lt;/code&gt;. بعدها أنشئ طلبًا في Apidog يؤدي إلى هذا المسار وتأكد من status code.&lt;/p&gt;

&lt;p&gt;إذا لم تغلف حالات panic، قد يسقط الاتصال ويظهر خطأ شبكة. هذا أيضًا سلوك عقد يمكن توثيقه.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل يمكن تشغيل Apidog ضد binary داخل Docker؟
&lt;/h3&gt;

&lt;p&gt;نعم. اجعل &lt;code&gt;baseUrl&lt;/code&gt; يشير إلى المنفذ المكشوف للحاوية. إذا كنت تستخدم Docker Compose، تأكد أن مشغل Apidog يستطيع الوصول إلى نفس الشبكة أو استخدم المنفذ المربوط بالمضيف.&lt;/p&gt;

&lt;h3&gt;
  
  
  ماذا عن gRPC؟
&lt;/h3&gt;

&lt;p&gt;Apidog يدعم نوع طلب gRPC. استورد ملفات &lt;code&gt;.proto&lt;/code&gt;، اختر service وmethod، املأ request body، ثم أرسل. نفس مفاهيم البيئات والمصادقة وسيناريوهات الاختبار تنطبق أيضًا.&lt;/p&gt;

&lt;h3&gt;
  
  
  هل يغني ذلك عن &lt;code&gt;cargo test&lt;/code&gt;؟
&lt;/h3&gt;

&lt;p&gt;لا. استخدم &lt;code&gt;cargo test&lt;/code&gt; لاختبارات منطق Rust الداخلي. استخدم Apidog لاختبار العقد التشغيلي عبر HTTP.&lt;/p&gt;

&lt;p&gt;الطبقتان تكملان بعضهما:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cargo test&lt;/code&gt; يكتشف دالة مكسورة.&lt;/li&gt;
&lt;li&gt;Apidog يكتشف JSON خاطئًا، status code مختلفًا، header مفقودًا، أو سلوك مصادقة غير متوقع.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  هل Apidog مجاني لمشاريع Rust مفتوحة المصدر؟
&lt;/h3&gt;

&lt;p&gt;نعم. عميل Apidog مجاني للأفراد والفرق الصغيرة، وتتضمن الطبقة المجانية سيناريوهات الاختبار، المحاكاة، وتصدير OpenAPI.&lt;/p&gt;

&lt;h2&gt;
  
  
  الخلاصة
&lt;/h2&gt;

&lt;p&gt;واجهات Rust تحتاج اختبارًا لا ينتظر المترجم في كل مرة. باستخدام Apidog يمكنك بناء مجموعة طلبات تتحقق من HTTP الحقيقي، JSON الحقيقي، JWT، mocks للواجهة الأمامية، وسيناريو CI يعمل ضد binary فعلي.&lt;/p&gt;

&lt;p&gt;ابدأ بـ &lt;code&gt;GET /healthz&lt;/code&gt;، أضف طلبات JSON، غطِّ حالات Serde الفاشلة، ثم شغّل السيناريو في CI. بعد ذلك يصبح كل تغيير في Axum أو Actix اختبار عقد واضحًا بدل مفاجأة في وقت التشغيل.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apidog.com/download?utm_source=dev.to&amp;amp;utm_medium=wanda&amp;amp;utm_content=n8n-post-automation"&gt;قم بتنزيل Apidog&lt;/a&gt; ووجهه إلى خادم Rust الخاص بك. الإعداد يستغرق دقائق، والنتيجة عقد API مستقل عن &lt;code&gt;cargo&lt;/code&gt; وقابل للمشاركة مع الفريق.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
