يقضي مطور الواجهة الخلفية معظم يومه في حلقة قصيرة: يرسل طلبًا إلى نقطة نهاية، يقرأ استجابة JSON، يعدّل الكود، ثم يكرر. استخدام واجهة رسومية ثقيلة لهذه الدورة يضيف وقت تحميل وخطوات لا تحتاجها في كثير من المهام اليومية.
أدوات سطر الأوامر (CLI) مناسبة لهذه الحلقة لأنها تبدأ بسرعة، تؤدي مهمة محددة، ويمكن ربطها معًا في سكربتات shell أو مهام CI. ستحتاج غالبًا إلى عميل HTTP، وأداة لمعالجة JSON، وطريقة لكشف خادم محلي، ومراقب ملفات، ومشغل لاختبارات API.
يعرض هذا الدليل عشر أدوات تستحق مكانًا في PATH لمطور الواجهة الخلفية، مع أمر عملي لكل أداة. وللسياق الأشمل حول بناء واجهات برمجة التطبيقات، راجع دليل تطوير API.
ما الذي يجعل أداة سطر الأوامر خفيفة الوزن؟
الخفة لا تعني قلة الميزات فقط؛ بل تعني تقليل الاحتكاك بينك وبين النتيجة. قيّم كل أداة وفقًا لأربعة معايير:
-
حجم وطريقة التثبيت: ملف ثنائي واحد أو حزمة
npxصغيرة أفضل من أداة تسحب بيئة تشغيل وملفات إعداد كثيرة. - سرعة البدء: يجب أن تعمل الأداة فورًا، خصوصًا عندما تستدعيها مرارًا داخل حلقة تطوير.
- الإعداد قبل أول نتيجة: الأداة الخفيفة تعطيك نتيجة مفيدة دون مشروع جديد أو حساب أو لوحة تحكم.
-
قابلية التركيب: تقرأ من
stdin، تكتب إلىstdout، وتعيد رمز خروج مناسبًا حتى تعمل داخل pipelines وCI.
الأدوات التالية مرتبة تقريبًا من الأبسط والأكثر تخصيصًا إلى الأدوات التي تدير جزءًا أكبر من سير العمل. أداة curl موجودة غالبًا على جهازك بالفعل.
curl
curl هو الأساس لطلبات HTTP القابلة للبرمجة. استخدمه عندما تحتاج إلى أمر يمكن نسخه إلى سكربت أو مهمة CI دون أي تبعيات إضافية.
curl -s -X POST https://api.github.com/repos/curl/curl/issues \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Test issue"}'
استخدم هذه الخيارات حسب المهمة:
-
-s: إخفاء عداد التقدم لإخراج نظيف. -
-i: عرض رؤوس الاستجابة مع الجسم. -
-w '%{http_code}': طباعة رمز الحالة. -
--fail: إرجاع رمز خروج غير صفري عند استجابات4xxأو5xx، وهو مفيد في CI.
curl --fail --silent --show-error \
-w '\nHTTP %{http_code}\n' \
https://api.example.com/health
الأفضل لـ: سكربتات shell، فحوصات الصحة، وطلبات CI.
الحدود: بناء جملة الخيارات كثيف، وبناء أو تحليل JSON يدوي نسبيًا.
HTTPie
HTTPie، عبر الأمر http، يجعل الطلبات التفاعلية أسهل للقراءة والكتابة. يرسل JSON افتراضيًا ويعرض استجابات منسقة.
http POST httpbin.org/post name=apidog role=api-tool active:=true
ينتج الأمر جسم JSON مشابهًا للتالي:
{
"name": "apidog",
"role": "api-tool",
"active": true
}
استخدم الصيغ التالية أثناء بناء الطلب:
-
key=valueلقيمة نصية. -
key:=valueلقيمة JSON خام، مثل الأرقام والقيم المنطقية. -
Header:valueلإضافة رأس.
http GET https://api.example.com/users \
Authorization:"Bearer $TOKEN" \
page:=1
الأفضل لـ: استكشاف API يدويًا عندما تكون قابلية القراءة أهم من الاختصار.
الحدود: يعتمد على Python، لذلك قد يكون بدء تشغيله أبطأ من بديل أصلي مثل xh.
xh
xh يقدم أسلوب HTTPie نفسه تقريبًا، لكنه ملف ثنائي مبني بـ Rust. هذا يجعله مناسبًا للحاويات وصور CI الخفيفة.
xh POST httpbin.org/post name=apidog age:=24
بما أن الصياغة متوافقة مع أسلوب HTTPie، يمكنك استخدام:
xh GET https://api.example.com/users \
Authorization:"Bearer $TOKEN" \
limit:=20
يدعم xh أيضًا HTTP/2 وHTTP/3. يمكنك تنزيل الملفات الثنائية الجاهزة من مشروع xh على GitHub.
الأفضل لـ: من يريد سهولة HTTPie مع سرعة بدء أصلية وتثبيت بلا تبعيات.
الحدود: يغطي الاستخدامات الشائعة لـ HTTPie، لكنه لا يهدف إلى تغطية كل الإضافات الممكنة.
jq
jq هو الأداة التي تحول استجابة JSON كبيرة إلى قيمة يمكن أن يستخدمها سكربتك. اربطه مع curl أو xh بدل فحص JSON يدويًا.
curl -s https://api.github.com/repos/stedolan/jq | jq '.stargazers_count'
لاستخراج قيمة نصية خام لاستخدامها في متغير shell، أضف -r:
REPO_NAME=$(curl -s https://api.github.com/repos/stedolan/jq | jq -r '.name')
echo "$REPO_NAME"
أمثلة عملية أخرى:
# استخراج أسماء العناصر من مصفوفة
jq '.items[] | .name'
# تصفية العناصر النشطة
jq '.items[] | select(.active)'
# إنشاء كائن جديد من الاستجابة
jq '{id, name, status}'
الأفضل لـ: استخراج وتحويل حقول JSON في السكربتات وCI.
الحدود: التحويلات المعقدة والمتداخلة تحتاج إلى تعلم صياغة jq.
gh (GitHub CLI)
gh ينقل عمليات GitHub الشائعة إلى الطرفية. بعد تسجيل الدخول مرة واحدة، يمكنك إنشاء طلبات السحب، متابعة فحوصات CI، أو استدعاء GitHub API بمصادقة جاهزة.
gh pr create --title "Add rate limiting" --body "Closes #42" --base main
أوامر عملية لسير العمل اليومي:
# متابعة فحوصات طلب السحب الحالي
gh pr checks --watch
# متابعة تنفيذ GitHub Actions
gh run watch
# استدعاء GitHub API مباشرة
gh api repos/{owner}/{repo}/issues
سجّل الدخول أولًا:
gh auth login
الأفضل لـ: أتمتة عمليات GitHub، مثل إنشاء PR من CI أو متابعة Actions.
الحدود: مخصص لـ GitHub، ولن يحل محل أدوات GitLab أو Bitbucket.
ngrok
يكشف ngrok منفذًا محليًا عبر رابط عام آمن. استخدمه عند اختبار webhooks أو مشاركة خادم تطوير مع زميل أو خدمة خارجية.
ngrok http 8080
سيعرض ngrok عنوان URL عام من نوع https:// يوجه الطلبات إلى localhost:8080.
لتصحيح webhook، افتح مفتش الطلبات المحلي:
http://127.0.0.1:4040
من هناك يمكنك مراجعة الطلبات التي وصلت وإعادة تشغيلها أثناء التحقيق في مشكلة.
الأفضل لـ: اختبار webhooks، مشاركة بيئة محلية، واختبار استدعاءات الطرف الثالث.
الحدود: خدمة تجارية بطبقة مجانية؛ قد يتغير عنوان URL بين الجلسات وتوجد حدود للاستخدام.
mkcert
mkcert ينشئ شهادات HTTPS موثوقة محليًا. استخدمه عندما تحتاج إلى اختبار سلوك لا يظهر إلا مع HTTPS، مثل ملفات تعريف الارتباط الآمنة أو إعادة توجيه OAuth.
mkcert -install
mkcert localhost 127.0.0.1 myapp.local
نفّذ mkcert -install مرة واحدة لإعداد مرجع مصدق محلي على جهازك. بعد ذلك، أنشئ شهادة للنطاقات المحلية التي يحتاجها خادم التطوير.
مثال عند استخدام اسم محلي مخصص:
mkcert api.localhost app.localhost
ثم مرّر ملفات الشهادة والمفتاح التي أنشأها الأمر إلى خادم التطوير أو الوكيل العكسي.
الأفضل لـ: تشغيل HTTPS محلي موثوق يقترب من سلوك الإنتاج.
الحدود: للتطوير فقط. لا تستخدم شهادات mkcert في الإنتاج، واحمِ مفتاح المرجع المصدق المحلي.
watchexec
watchexec يراقب الملفات ويعيد تشغيل أمر عند حدوث تغيير. يفيد في تقصير دورة التعديل والتشغيل دون الاعتماد على وضع مراقبة خاص بإطار عمل معين.
watchexec -e py -r 'pytest tests/'
في هذا المثال:
-
-e pyيراقب ملفات Python. -
-rيوقف العملية السابقة ويعيد تشغيلها بدل تكديس عمليات متعددة.
أمثلة لمشاريع أخرى:
# خادم Go
watchexec -r 'go run .'
# اختبارات JavaScript
watchexec 'npm test'
# تطبيق Node.js
watchexec -e js,json -r 'node server.js'
يحترم watchexec ملف .gitignore افتراضيًا، لذلك لا يعيد التشغيل عادة بسبب مخرجات البناء أو التبعيات المتجاهلة.
الأفضل لـ: إعادة تشغيل خادم محلي أو اختبارات عند الحفظ.
الحدود: يعيد تشغيل العملية فقط؛ لا يقدم إعادة تحميل ساخنة للوحدات أو حفظ حالة العملية.
Docker CLI
Docker CLI أثقل من الأدوات الأخرى لأنه يحتاج إلى Docker daemon وموارد نظام، لكنه عملي جدًا لتشغيل خدمات تطوير قابلة للتخلص منها مثل Postgres وRedis.
docker run --rm -e POSTGRES_PASSWORD=dev -p 5432:5432 postgres:16
يعني ذلك:
-
--rm: حذف الحاوية عند إيقافها. -
-e: تعريف متغير بيئة داخل الحاوية. -
-p: ربط منفذ الحاوية بمنفذ جهازك.
يمكن لتطبيقك الآن الاتصال بـ:
localhost:5432
مثال Redis سريع:
docker run --rm -p 6379:6379 redis:7
الأفضل لـ: قواعد البيانات والخدمات المساندة لتطوير محلي واختبارات تكامل قابلة للتكرار.
الحدود: ليس خفيفًا من ناحية الموارد، لكنه يوفر طريقة قابلة للبرمجة لتشغيل بنية محلية دون تثبيت الخدمات مباشرة على النظام.
apidog-cli
عند العمل على API من الطرفية، تحتاج أحيانًا إلى الوصول إلى مشروع API نفسه: نقاط النهاية، المخططات، البيئات، وسيناريوهات الاختبار. توفر Apidog أداة apidog-cli لربط هذه الموارد بسير عمل الطرفية.
ثبّت الأداة وسجّل الدخول ثم شغّل سيناريو اختبار محفوظًا:
npm install -g apidog-cli
apidog login --with-token <YOUR_TOKEN>
apidog run -t <scenario_id> -e <env_id> -r cli
يشغّل apidog run السيناريو مقابل البيئة المحددة ويطبع النتائج في الطرفية. عند نجاح التأكيدات يعيد رمز خروج 0، وعند الفشل يعيد رمزًا غير صفري، لذلك يمكن وضعه مباشرة ضمن بوابة CI.
مثال مبسط في GitHub Actions:
- name: Run API scenario
run: apidog run -t ${{ secrets.APIDOG_SCENARIO_ID }} -e ${{ secrets.APIDOG_ENV_ID }} -r cli
تغطي CLI أيضًا مجموعات أوامر لإدارة موارد المشروع، منها:
-
endpointوschemaللتصميم. -
importوexportلنقل مواصفات OpenAPI وSwagger وPostman. -
mockلإعداد توقعات التقليد. -
environmentوvariablesلإدارة الإعدادات. -
runلتشغيل سيناريوهات الاختبار.
ينتج الأمر JSON منظمًا مع agentHints.nextSteps، ما يجعله مناسبًا أيضًا لسير عمل مساعدي الترميز بالذكاء الاصطناعي الذين يقومون بتطوير API.
للتفاصيل، راجع دليل Apidog CLI الكامل ودليل تثبيت Apidog CLI.
الأفضل لـ: تشغيل سيناريوهات اختبار API في CI وإدارة موارد المشروع من السكربتات، خصوصًا في سير عمل تطوير API المعتمد على المواصفات.
ملاحظة: Apidog منتج تجاري بطبقة مجانية وليس مفتوح المصدر. الجزء الخفيف هنا هو apidog-cli، بينما منصة Apidog الكاملة توفر واجهة رسومية فوق المشروع نفسه.
كيف تختار الأداة المناسبة؟
هذه الأدوات مكملة لبعضها غالبًا، وليست بدائل متطابقة. قد تستخدم عميل HTTP مع jq، ثم تضيف ngrok لاختبار webhook، وwatchexec لتشغيل الاختبارات تلقائيًا.
| الأداة | الأفضل لـ | التثبيت | مفتوحة المصدر؟ |
|---|---|---|---|
| curl | طلبات مبرمجة وفحوصات صحة CI | مثبتة مسبقًا غالبًا | نعم (ترخيص curl) |
| HTTPie | طلبات تفاعلية قابلة للقراءة | pip install httpie |
نعم (BSD) |
| xh | أسلوب HTTPie مع سرعة أصلية |
cargo install xh أو ملف ثنائي |
نعم (MIT) |
| jq | تصفية استجابات JSON |
brew install jq أو ملف ثنائي |
نعم (MIT) |
| gh | أتمتة PR وCI على GitHub |
brew install gh أو ملف ثنائي |
نعم (MIT) |
| ngrok | كشف localhost واختبار webhooks | تحميل ملف ثنائي | لا |
| mkcert | شهادات HTTPS محلية موثوقة |
brew install mkcert أو ملف ثنائي |
نعم (BSD) |
| watchexec | إعادة التشغيل عند تغيير الملفات | cargo install watchexec-cli |
نعم (Apache-2.0) |
| Docker CLI | خدمات تطوير قابلة للتخلص منها | تثبيت Docker | نعم (Apache-2.0) |
| apidog-cli | تشغيل السيناريوهات وإدارة المشروع | npm install -g apidog-cli |
لا |
اختصر قرارك حسب المهمة:
-
إرسال طلبات تفاعلية:
xhأوHTTPie. -
إرسال طلبات داخل سكربت أو CI:
curl. -
قراءة وتحويل JSON:
jq. -
كشف خادم محلي:
ngrok. -
HTTPS محلي موثوق:
mkcert. -
إعادة التشغيل عند الحفظ:
watchexec. - تشغيل خدمات مثل Postgres وRedis: Docker.
-
تشغيل اختبارات API وإدارة موارد المشروع:
apidog-cli.
خلاصة
المجموعة الجيدة من أدوات CLI ليست كبيرة؛ إنها مجموعة من أدوات سريعة يمكن تركيبها معًا. استخدم curl أو xh لإرسال الطلبات، وjq لتحويل الاستجابات، وngrok وmkcert لمعالجة الوصول المحلي وHTTPS، وwatchexec لتقصير حلقة التعديل والتشغيل، وDocker لتشغيل الخدمات المساندة.
يربط apidog-cli هذه الحلقة بمشروع API الفعلي، بحيث تكون نقاط النهاية والاختبارات التي تشغلها من الطرفية هي نفسها التي يديرها الفريق. نزّل Apidog لإعداد المشروع، ثم استخدم CLI لتشغيل السيناريوهات ضمن مسار CI.
Top comments (0)