
resterm v1.5.6
عميل API للطرفية (Terminal) يدعم HTTP وGraphQL وgRPC. ملفات .http بسيطة يمكنك مقارنتها والتحكم بإصداراتها، مع سير عمل، نماذج محاكاة، تنميط، تتبّع، استيراد OpenAPI، أنفاق SSH، إعادة توجيه منافذ Kubernetes، WebSocket وSSE ومشغّل CLI.
Resterm
عميل API وبيئة عمل أصلية للطرفية تدعم REST وGraphQL وgRPC وWebSocket وSSE.
Resterm هو بيئة عمل API-as-code - أو، بمصطلحات أكثر ألفة، عميل API - مبني حول ملفات .http و.rest نصية عادية يمكنك مقارنتها ومراجعتها والتحكم في إصداراتها. يجمع بين تحرير الطلبات التفاعلي وسير العمل التصريحي والتأكيدات والخوادم الوهمية والتتبع والتنميط والأتمتة بدون واجهة رسومية. كل شيء يبقى على جهازك. لا حسابات، لا مزامنة سحابية، لا تتبع.
إذا كنت تبحث عن عميل بأسلوب Postman يركز على مجموعات الواجهة الرسومية، فمن المحتمل أن Resterm ليس مناسبًا لك، لكن جرّبه على أي حال!
[!NOTE] Resterm الآن في الإصدار v1! راجع ملاحظات إصدار v1.0.0 للاطلاع على الميزات الجديدة والتغييرات الجذرية.
روابط سريعة: لقطات الشاشة، البدء السريع، ملفات الطلبات، التثبيت، التوثيق.
جولة في لقطات الشاشة
شاهد الواجهة أثناء العمل (انقر للتوسيع)
سير العمل
التتبع والخط الزمني
التنميط
الشرح
RestermScript
السمة الفاتحة
عرض توضيحي لمتصفح OAuth (تصميم واجهة قديم)
لماذا Resterm
- HTTP وGraphQL وgRPC وWebSocket وSSE جاهزة فورًا.
- الأتمتة تعيش داخل ملفات الطلبات: الشروط (
@when،@if/@elif/@else،@for-each)، سير العمل متعدد الخطوات (@workflow/@step)، الالتقاطات، المتغيرات والتأكيدات (@capture،@var،@assert). - RestermScript، لغة تعبيرات صغيرة مبنية خصيصًا لـ Resterm، مع خطافات JavaScript عندما تريدها.
- تحكم بأسلوب Vim مع تلميحات شريط سفلي سياقية، ومساعدة دون اتصال قابلة للبحث، ومساعدة
Kتحت المؤشر، وبحث/وأوامر مثل:wو:qو:helpو:docs. - مصادقة وتنقيب مدمجان: OAuth 2.0 (بيانات اعتماد العميل، كلمة المرور، رمز المصادقة مع PKCE)، مصادقة مدعومة بواجهات CLI الموجودة لديك، أنفاق SSH وإعادة توجيه منافذ Kubernetes. لا حاجة لأدوات إضافية.
- مشغّل CLI:
resterm runللتشغيل النصي وفي CI، مع مخرجات JSON وJUnit. - خوادم وهمية معلنة بجوار الطلبات التي تحاكيها، مع قواعد المطابقة والتسلسلات والتحقق من الاستدعاءات وإعادة التحميل السريع.
- تتبع الخط الزمني والتنميط ومقارنة التشغيلات عبر البيئات.
- سجلات البث ووحدة تحكم تفاعلية لـ WebSocket وSSE.
- لا تكامل مع الذكاء الاصطناعي، أبدًا.
البدء السريع
- ثبّت Resterm (راجع التثبيت للنصوص البرمجية وWindows والتثبيت اليدوي). ```bash
brew install resterm
- قم بتهيئة مساحة عمل. ```bash
mkdir my-api && cd my-api
resterm init
resterm init يمنحك مشروعًا صغيرًا يعمل دون اتصال بالإنترنت. يتضمن ملف requests.http المُنشأ سيناريوهات محاكاة محلية وعددًا من الطلبات التي تعتمد على بعضها البعض. تغطي هذه السيناريوهات التأكيدات، ومصادقة bearer، ومطابقة JSON، وjson-rules، و@for-each.
- ابدأه وأرسل طلبك الأول. ```bash
resterm
اضغط Ctrl+Enter في المحرر لإرسال الطلب المحدد.
لا توجد ملفات بعد؟ فقط شغّل resterm، واكتب عنوان URL واضغط Ctrl+Enter. كما يعمل أمر curl الملصق أيضًا.
ملفات الطلبات
تستخدم ملفات طلبات Resterm صيغة HTTP القياسية بالإضافة إلى توجيهات # @ للتكوين والأتمتة:```http
@setting base-url https://api.example.com/v1/
Create users
// Send this request once for each name in the list.
@for-each ["david", "tom"] as name
@when env.mode == "development"
@assert response.statusCode == 201
POST users Content-Type: application/json
{"name":"{{= name }}"}
الإعدادات قبل الطلب الأول تنطبق على الملف بأكمله، و`###` يفصل بين الطلبات، ويمكن للتوجيهات تكرار الطلب أو تقييده أو التحقق من صحته. مزيد من الأمثلة هنا: [`_examples/`](https://github.com/unkn0wn-root/resterm/blob/main/_examples).
## CLI
`resterm run` ينفّذ ملفات `.http` / `.rest` دون فتح واجهة TUI، وهذا ما يعمل به CI.```bash
resterm run --request CreateUser requests.http
المشروع المُولَّد يتواصل مع خادم محاكاة محلي. ابدأ تشغيله في طرفية أخرى أولاً:```bash resterm mock requests.http
في واجهة TUI، اضغط `g Shift+M` بدلاً من ذلك لبدء نفس خادم المحاكاة من مساحة العمل.
توثيق [CLI](https://github.com/unkn0wn-root/resterm/blob/main/docs/cli.md) يغطي المحددات، صيغ الإخراج والمزيد من الأمثلة.
## ورقة اختصارات لوحة المفاتيح
- تركيز الأجزاء والتخطيط
- `Tab` / `Shift+Tab`: التنقل بين الشريط الجانبي، المحرر والاستجابة.
- `g+r`، `g+i`، `g+p`: الانتقال إلى الطلبات، المحرر أو الاستجابة.
- `g+h` / `g+l`: تغيير الحجم أفقيًا. يغيّر عرض الشريط الجانبي عند تركيزه، أو تقسيم المحرر/الاستجابة بخلاف ذلك.
- `g+j` / `g+k`: تغيير ارتفاع المحرر/الاستجابة عند تكديسهما، أو طي/توسيع الفروع في المستكشف.
- `g+v` / `g+s`: تبديل جزء الاستجابة بين التخطيط المضمّن والمكدّس.
- `g+1`، `g+2`، `g+3`: تصغير أو استعادة الشريط الجانبي، المحرر، الاستجابة.
- `g+z` / `g+Z`: تكبير الجزء المركّز، إلغاء التكبير.
- البيئات والمتغيرات العامة
- `Ctrl+E`: تبديل البيئات.
- `Ctrl+G`: فحص المتغيرات العامة الملتقطة.
- المساعدة والأوامر
- `?`: فتح فهرس المساعدة غير المتصل القابل للبحث.
- `K` (وضع المحرر العادي): فتح المساعدة للتوجيه أو القالب أو الكلمة الأساسية تحت المؤشر.
- `:help <topic>` / `:man <topic>`: فتح موضوع مضمّن؛ `:docs <topic>` يفتح الدليل الكامل المطابق للإصدار.
- `Ctrl+O`: فتح نافذة الملف/مساحة العمل المنبثقة. اكتب للتصفية، مرّر باستخدام `Up` / `Down`، واستخدم `Tab` للانتقال إلى المجلدات.
- `:`: فتح سطر الأوامر. استخدم `Up` / `Down` لتحديد الاقتراحات، `Tab` لإكمال أحدها، أو `Enter` لقبول وتشغيل تحديد. وسيطات المسار مثل `:mock start --source` و `:edit` تتصفح نظام الملفات في نفس النافذة المنبثقة.
- الاستجابات
- `Ctrl+V` / `Ctrl+U`: تقسيم جزء الاستجابة للمقارنة جنبًا إلى جنب.
- `Ctrl+Shift+C` أو `g y` (عند تركيز الاستجابة): نسخ علامة التبويب Pretty أو Raw أو Headers بالكامل.
- `g x`: عرض معاينة Explain للطلب النشط دون إرساله.
- `g e`: فتح الملف الحالي في محررك الخارجي.
> [!TIP]
> إذا كنت تتذكر ثلاثة اختصارات فقط:
> - `Ctrl+Enter` يرسل الطلب
> - `Tab` / `Shift+Tab` يبدّل بين الأجزاء
> - `g+p` ينتقل إلى الاستجابة
## التثبيت
**Linux / macOS (Homebrew)**```bash
brew install resterm
[!NOTE] يجب تحديث تثبيتات Homebrew باستخدام Homebrew (
brew upgrade resterm). الأمر المدمجresterm --updateمخصص للثنائيات المثبتة من إصدارات GitHub أو نصوص التثبيت.
Linux / macOS (نص برمجي Shell)
[!IMPORTANT] تعتمد الثنائيات الجاهزة لنظام Linux على glibc 2.32 أو أحدث. على توزيعة أقدم، قم بالبناء من المصدر باستخدام سلسلة أدوات glibc أحدث أو قم بترقية glibc قبل استخدام أرشيفات الإصدار.```bash curl -fsSL https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash
أو باستخدام `wget`:```bash
wget -qO- https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash
ويندوز (PowerShell)```powershell iwr -useb https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.ps1 | iex
النصوص تكتشف بنية جهازك، وتنزّل أحدث إصدار وتثبّت الملف الثنائي.
### التثبيت اليدوي
> [!NOTE]
> أداة التثبيت اليدوي تستخدم `curl` و `jq`. ثبّت `jq` عبر مدير الحزم الخاص بك (`brew install jq`, `sudo apt install jq`, إلخ).
**Linux / macOS**```bash
# Detect latest tag
LATEST_TAG=$(curl -fsSL https://api.github.com/repos/unkn0wn-root/resterm/releases/latest | jq -r .tag_name)
# Download the matching binary (Darwin/Linux + amd64/arm64)
curl -fL -o resterm "https://github.com/unkn0wn-root/resterm/releases/download/${LATEST_TAG}/resterm_$(uname -s)_$(uname -m)"
# Make it executable and move it onto your PATH
chmod +x resterm
sudo install -m 0755 resterm /usr/local/bin/resterm
ويندوز (PowerShell)```powershell $latest = Invoke-RestMethod https://api.github.com/repos/unkn0wn-root/resterm/releases/latest $asset = $latest.assets | Where-Object { $.name -like 'resterm_Windows*' } | Select-Object -First 1 Invoke-WebRequest -Uri $asset.browser_download_url -OutFile resterm.exe
Optionally relocate to a directory on PATH, e.g.:
Move-Item resterm.exe "$env:USERPROFILE\bin\resterm.exe"
### من المصدر```bash
go install github.com/unkn0wn-root/resterm/cmd/resterm@latest
تحديث```bash
resterm --check-update resterm --update
الأمر الأول يتحقق مما إذا كان هناك إصدار أحدث متاح. الأمر الثاني يقوم بالتنزيل والتحقق والتثبيت في مكانه. على ويندوز، يبقى الملف الثنائي القديم بجوار الجديد باسم `resterm.exe.old` ويتم تنظيفه عند التحديث التالي.
## الإعداد
- البيئات هي ملفات JSON (`resterm.env.json`) يتم اكتشافها في دليل الطلب أو جذر مساحة العمل أو دليل العمل الحالي (CWD). يمكن للملف تعريف بيئات مسماة أو مجموعات مستقلة، على سبيل المثال api و app و credentials، التي تتحد في بيئة واحدة. ملفات Dotenv (`.env`, `.env.*`) اختيارية عبر `--env-file` وهي خاصة بمساحة عمل واحدة. راجع [البيئات المجمعة](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#grouped-environments) والمثال القابل للتشغيل في `_examples/grouped/`.
- يتم تخزين الإعدادات حسب نظام التشغيل ويمكن تجاوزها باستخدام `RESTERM_CONFIG_DIR`:
- macOS: `~/Library/Application Support/resterm`
- ويندوز: `%APPDATA%\resterm`
- لينكس/يونكس: `~/.config/resterm`
## خوادم المحاكاة
يمكنك تعريف استجابات المحاكاة في نفس ملفات `.http` التي تحتوي على طلباتك.
- طابق الطلبات الواردة حسب الاستعلام أو الترويسات أو جسم JSON، ثم اختر استجابة مسماة أو افتراضية.
- أعد سلسلة من الاستجابات لاختبارات الاستطلاع وإعادة المحاولة. استخدم مسارًا أو استعلامًا أو ترويسة أو قيمة ملف تعريف ارتباط لتتبع كل سلسلة على حدة.
- أخر الاستجابات بمقدار ثابت، أو أعطِ كل طلب تأخيرًا مختلفًا باستخدام `random` أو `normal` أو `jitter`.
- أنشئ الاستجابات من قيم المسار والاستعلام والترويسات والجسم، مع مولّدات للبيانات الديناميكية.
- تحقق من أعداد الاستدعاءات باستخدام `@expect` أو افحص حركة المرور المستلمة من RestermScript.
- إعادة تحميل ساخنة لملفات المصدر والملفات الثابتة، مع دعم اختياري لـ TLS.
سيناريوهان على مسار واحد:```http
### Payment accepted
# @mock method=POST path=/payments name=accepted default=true latency=150ms
HTTP/1.1 202 Accepted
Content-Type: application/json
{"id":"pay_123","status":"pending"}
### Payment declined
# @mock method=POST path=/payments name=declined
# @match query={"mode":"decline"} headers={"X-Tenant":"demo"} json={"amount":0}
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
{"error":"amount must be positive"}
قدّم ملفًا واحدًا أو دليلًا كاملًا:```bash resterm mock ./requests.http resterm mock --recursive --addr 127.0.0.1:9090 ./requests
المزيد في [مرجع الخوادم الوهمية](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#mock-servers)، ودليل [`resterm mock` لواجهة الأوامر](https://github.com/unkn0wn-root/resterm/blob/main/docs/cli.md#resterm-mock) والمثال العملي ([_examples/mocks.http](https://github.com/unkn0wn-root/resterm/blob/main/_examples/mocks.http)).
## بدون واجهة رسومية (Headless)
حزمة [`headless`](https://github.com/unkn0wn-root/resterm/blob/main/headless) هي واجهة Go البرمجية العامة لنفس المحرك الذي يشغّل واجهة TUI وواجهة الأوامر. استخدمها لتشغيل الطلبات وسير العمل والتحقق من الصحة ومقارنة عمليات التشغيل والملفات الشخصية من كود Go الخاص بك أو من CI.
إذا كنت تفضّل عدم بناء مشغّل بنفسك، فهناك [resterm-runner](https://github.com/unkn0wn-root/resterm-runner).
## المجموعات (Collections)
صدّر مساحة عمل كحزمة متوافقة مع Git واستوردها إلى مساحة عمل أخرى. تحمل الحزم ملف `manifest.json` مع مجاميع اختبارية (checksums)، بحيث تتحقق عمليات الاستيراد أولاً من سلامة الملفات. يتم تصدير قيم البيئة كعناصر نائبة `REPLACE_ME`، بحيث لا تغادر الأسرار جهازك أبداً.```bash
resterm collection export --workspace ./my-api --out ./shared/my-api-bundle
resterm collection import --in ./shared/my-api-bundle --workspace ./my-local-api
أضف --dry-run لمعاينة الاستيراد و--force لاستبدال الملفات الموجودة. الوثائق: مشاركة المجموعات.
استيراد Curl
الصق أمر curl في المحرر واضغط Ctrl+Enter لتحويله إلى طلب منظم. يفهم Resterm العلامات الشائعة، ويدمج مقاطع البيانات المتكررة، ويحافظ على عمليات الرفع متعددة الأجزاء سليمة. يتم تجاهل بادئات الصدفة مثل sudo أو $. يقوم CLI بنفس التحويل باستخدام --from-curl.
هذا:```bash
curl -X POST https://api.example.com/login
-H "Content-Type: application/json"
--user demo:secret
-d '{"user":"demo"}'
يصبح هذا:```http
### POST https://api.example.com/login
# @auth basic demo secret
POST https://api.example.com/login
Content-Type: application/json
{"user":"demo"}
Docs: الطلبات المضمّنة وأمثلة الاستيراد.
RestermScript
RestermScript (RTS) هي لغة تعبيرات صغيرة مبنية خصيصًا لـ Resterm. تستهدف تنسيق الطلبات وسير العمل والتوجيهات مباشرةً، مما يُبقي السكربتات قصيرة وقابلة للتنبؤ. تبقى خطافات JavaScript متاحةً عندما تحتاج إلى المزيد.
مثال سريع (وحدة RTS + طلب):```rts // rts/helpers.rts module helpers export fn authHeader(token) { return token ? "Bearer " + token : "" }
أداة `subfinder` هي أداة اكتشاف نطاقات فرعية سلبية مبنية على أساس بحثي، وتستخدم مصادر بيانات مختلفة لحل النطاقات الفرعية من أجل اكتشاف الأصول الصالحة. تم تصميمها كأداة تمرير سريعة وقابلة للتخصيص بدرجة كبيرة، وتتميز ببنية معيارية بسيطة ولكنها قابلة للتوسيع.
**ميزاتها:**
- **اكتشاف نطاقات فرعية سلبية** عبر مصادر متعددة
- **دعم مصادر بيانات قابلة للتخصيص** لتحسين نتائج الاكتشاف
- **مخرجات قابلة للتخصيص** بصيغ JSON وJSONL وSTDIN
- **دعم أنابيب الأوامر** للاستخدام مع أدوات أخرى
- **دعم التكوين عبر ملفات YAML** لإعدادات مرنة
- **دعم مفاتيح API** للوصول إلى مصادر بيانات إضافية
- **دعم وكيل HTTP** لتوجيه الطلبات
- **دعم معدل الطلبات** للتحكم في سرعة الاكتشاف
- **دعم مهلة زمنية** للتحكم في مدة الانتظار
- **دعم إعادة المحاولة** لتحسين الموثوقية
- **دعم وضع الصمت** لتقليل الإخراج غير الضروري
- **دعم وضع الإصدار** لعرض معلومات الإصدار
- **دعم وضع المساعدة** لعرض خيارات الاستخدام
**الاستخدام:**
```bash
subfinder [flags]
الأعلام:
Flags:
-d, -domain string[] النطاقات لاكتشاف النطاقات الفرعية لها
-dL, -list string ملف يحتوي على قائمة بالدومينات لاكتشاف النطاقات الفرعية لها
-nW, -active عرض النطاقات الفرعية النشطة فقط
-iL, -input string ملف يحتوي على قائمة بالدومينات لاكتشاف النطاقات الفرعية لها
-r, -recursive استخدام الاكتشاف العودي للنطاقات الفرعية
-all استخدام جميع مصادر البيانات لاكتشاف النطاقات الفرعية
-cs, -collect-sources عرض مصادر البيانات المستخدمة في الاكتشاف
-oI, -ip عرض عنوان IP للنطاقات الفرعية المكتشفة
-nP, -no-passive تعطيل الاكتشاف السلبي للنطاقات الفرعية
-nR, -no-recursive تعطيل الاكتشاف العودي للنطاقات الفرعية
-nW, -no-wildcard تعطيل اكتشاف النطاقات الفرعية البرية
-m, -max-time int الحد الأقصى للوقت المسموح به للاكتشاف (بالثواني)
-p, -ports string المنافذ للتحقق من النطاقات الفرعية النشطة
-t, -timeout int مهلة زمنية للطلبات (بالثواني)
-rL, -resolvers string قائمة بمحللات DNS مخصصة
-rD, -resolver string محلل DNS مخصص
-o, -output string ملف الإخراج
-oJ, -json إخراج بصيغة JSON
-oL, -list إخراج بصيغة JSONL
-oD, -dir string دليل الإخراج
-s, -silent وضع الصمت
-v, -verbose وضع الإخراج المفصل
-version عرض معلومات الإصدار
-h, -help عرض المساعدة
أمثلة على الاستخدام:
# اكتشاف النطاقات الفرعية لدومين واحد
subfinder -d example.com
# اكتشاف النطاقات الفرعية لدومينات متعددة
subfinder -d example.com -d example.org
# اكتشاف النطاقات الفرعية من ملف
subfinder -dL domains.txt
# اكتشاف النطاقات الفرعية مع عرض عناوين IP
subfinder -d example.com -oI
# اكتشاف النطاقات الفرعية مع إخراج JSON
subfinder -d example.com -oJ
# اكتشاف النطاقات الفرعية مع إخراج JSONL
subfinder -d example.com -oL
# اكتشاف النطاقات الفرعية مع حفظ النتائج في ملف
subfinder -d example.com -o output.txt
# اكتشاف النطاقات الفرعية مع استخدام جميع مصادر البيانات
subfinder -d example.com -all
# اكتشاف النطاقات الفرعية مع استخدام محلل DNS مخصص
subfinder -d example.com -rD 8.8.8.8
# اكتشاف النطاقات الفرعية مع استخدام قائمة محللات DNS
subfinder -d example.com -rL resolvers.txt
# اكتشاف النطاقات الفرعية مع تحديد مهلة زمنية
subfinder -d example.com -t 10
# اكتشاف النطاقات الفرعية مع تحديد الحد الأقصى للوقت
subfinder -d example.com -m 60
# اكتشاف النطاقات الفرعية مع استخدام وكيل HTTP
subfinder -d example.com -p http://proxy.example.com:8080
# اكتشاف النطاقات الفرعية مع استخدام معدل طلبات محدد
subfinder -d example.com -rate 10
# اكتشاف النطاقات الفرعية مع إعادة المحاولة
subfinder -d example.com -retry 3
# اكتشاف النطاقات الفرعية مع وضع الصمت
subfinder -d example.com -s
# اكتشاف النطاقات الفرعية مع وضع الإخراج المفصل
subfinder -d example.com -v
# اكتشاف النطاقات الفرعية مع عرض معلومات الإصدار
subfinder -version
# اكتشاف النطاقات الفرعية مع عرض المساعدة
subfinder -h
التثبيت:
go install -v github.com/projectdiscovery/subfinder/v2/cmd/subfinder@latest
التكوين:
يمكن تكوين subfinder عبر ملف YAML. الملف الافتراضي هو ~/.config/subfinder/config.yaml. يمكنك تحديد ملف تكوين مخصص باستخدام العلم -config.
# مثال على ملف التكوين
resolvers:
- 8.8.8.8
- 8.8.4.4
- 1.1.1.1
sources:
- archive
- crt
- hackertarget
- rapiddns
- threatcrowd
- virustotal
keys:
virustotal: "YOUR_API_KEY"
censys: "YOUR_API_KEY"
securitytrails: "YOUR_API_KEY"
chaos: "YOUR_API_KEY"
shodan: "YOUR_API_KEY"
fofa: "YOUR_API_KEY"
binaryedge: "YOUR_API_KEY"
bufferover: "YOUR_API_KEY"
c99: "YOUR_API_KEY"
certspotter: "YOUR_API_KEY"
dnsdb: "YOUR_API_KEY"
github: "YOUR_API_KEY"
intelx: "YOUR_API_KEY"
passivetotal: "YOUR_API_KEY"
recon: "YOUR_API_KEY"
robtex: "YOUR_API_KEY"
threatbook: "YOUR_API_KEY"
urlscan: "YOUR_API_KEY"
zoomeye: "YOUR_API_KEY"
مصادر البيانات:
يدعم subfinder مجموعة واسعة من مصادر البيانات لاكتشاف النطاقات الفرعية، بما في ذلك:
- Archive.org
- Crt.sh
- HackerTarget
- RapidDNS
- ThreatCrowd
- VirusTotal
- Censys
- SecurityTrails
- Chaos
- Shodan
- FOFA
- BinaryEdge
- BufferOver
- C99
- CertSpotter
- DNSDB
- GitHub
- IntelX
- PassiveTotal
- Recon
- Robtex
- ThreatBook
- URLScan
- ZoomEye
الاعتمادات:
- projectdiscovery/goflags
- projectdiscovery/retryabledns
- projectdiscovery/utils
- projectdiscovery/ratelimit
- projectdiscovery/httpx
- projectdiscovery/iputil
- projectdiscovery/stringsutil
- projectdiscovery/mapcidr
- projectdiscovery/networkpolicy
- projectdiscovery/retryablehttp-go
- projectdiscovery/blackrock
- projectdiscovery/asnmap
- projectdiscovery/cdncheck
- projectdiscovery/freeport
- projectdiscovery/gologger
- projectdiscovery/hmap
- projectdiscovery/httputil
- projectdiscovery/iputil
- projectdiscovery/networkpolicy
- projectdiscovery/ratelimit
- projectdiscovery/retryabledns
- projectdiscovery/retryablehttp-go
- projectdiscovery/stringsutil
- projectdiscovery/utils
- projectdiscovery/wappalyzergo
- projectdiscovery/yamldoc-go
- projectdiscovery/httpx
- projectdiscovery/mapcidr
- projectdiscovery/asnmap
- projectdiscovery/cdncheck
- projectdiscovery/freeport
- projectdiscovery/gologger
- projectdiscovery/hmap
- projectdiscovery/httputil
- projectdiscovery/iputil
- projectdiscovery/networkpolicy
- projectdiscovery/ratelimit
- projectdiscovery/retryabledns
- projectdiscovery/retryablehttp-go
- projectdiscovery/stringsutil
- projectdiscovery/utils
- projectdiscovery/wappalyzergo
- projectdiscovery/yamldoc-go```http
@use ./rts/helpers.rts
@when env.has("feature")
@assert response.statusCode == 200
GET https://api.example.com/users/{{= vars.get("user") }} Authorization: {{= helpers.authHeader(vars.get("auth.token")) }}
المرجع الكامل: [`docs/restermscript.md`](https://github.com/unkn0wn-root/resterm/blob/main/docs/restermscript.md).
## شرح معمّق
### OAuth 2.0
استخدم `@auth oauth2` للحصول على الرموز المميزة وحقنها. يتم تخزين الرموز مؤقتًا لكل بيئة ويتم تحديثها عند الإمكان. يُعد منح بيانات اعتماد العميل هو الخيار الافتراضي. كما يتم دعم منح كلمة المرور ورمز التفويض مع PKCE أيضًا:```http
### Service status
# @auth oauth2 token_url={{oauth.tokenUrl}} client_id={{oauth.clientId}} client_secret={{oauth.clientSecret}} cache_key=my-api
GET {{base.url}}/anything/projects
مثال: _examples/oauth2.http. راجع توثيق OAuth 2.0.
سير العمل والبرمجة النصية
سير العمل يربط الطلبات المسماة ويمكنه اختيار الخطوة التالية من الاستجابة:```http
Sign in
@workflow sign-in
@step Login using=Login
// GetProfile and RefreshToken are request names. // The first true condition runs the named request.
@if last.statusCode == 200 run=GetProfile
@elif last.statusCode == 401 run=RefreshToken
@else fail="unexpected login response"
يمكنها أيضًا تمرير البيانات بين الخطوات وتشغيل خطافات RestermScript أو JavaScript. مثال: [`_examples/workflows.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/workflows.http). راجع [توثيق سير العمل](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#workflows).
### الاستطلاع وإعادة المحاولة
استخدم `@poll` لتكرار طلب حتى يصبح شرط الاستجابة صحيحًا. أضف `@retry` لإعادة محاولة فشل الشبكة أو انتهاء المهلة أو استجابات محددة مع تراجع أسي:```http
### Wait for job
# @retry count=4
# @retry-when response.statusCode in [429, 502, 503]
# @retry-backoff exponential(100ms, 2s) jitter=20%
# @poll every=500ms timeout=30s until=response.json().status == "completed"
GET {{base.url}}/jobs/{{job.id}}
كل دورة استطلاع تحصل على ميزانية إعادة محاولة خاصة بها. مثال: _examples/polling-retries.http. راجع وثائق الاستطلاع وإعادة المحاولات.
مقارنة عمليات التشغيل
@compare يشغّل طلبًا واحدًا مقابل بيئتين على الأقل ويستخدم نتيجة واحدة كخط أساس:```http
Compare health
@compare dev stage prod base=prod
GET {{services.api.base}}/status
اضغط `g+c` لتشغيله في واجهة TUI، أو مرّر `--compare` في سطر الأوامر. مثال: [`_examples/compare.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/compare.http). راجع [وثائق المقارنة](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#compare-runs).
### التتبّع والخط الزمني
يسجّل `@trace` مراحل HTTP ويمكنه الإشارة إلى الطلبات التي تتجاوز ميزانيات زمن الاستجابة:```http
### Trace API
# @trace dns<=50ms connect<=120ms total<=400ms tolerance=25ms
GET https://api.example.com/health
تظهر النتائج في تبويب الخط الزمني (Timeline) ويمكن تصديرها إلى OpenTelemetry. مثال: _examples/trace.http. راجع وثائق التتبع.
البث (WebSocket وSSE)
يسجّل @sse أحداث الخادم، بينما يقوم @websocket و@ws ببرمجة إطارات WebSocket. ينتج كلاهما نصوصًا في تبويب البث (Stream):```http
Events
@sse duration=30s idle=10s max-events=5
GET https://api.example.com/events
Chat
@websocket idle=3s
@ws send Hello
@ws close 1000 done
GET wss://api.example.com/chat
مثال: [`_examples/streaming.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/streaming.http). راجع [توثيق البث](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#streaming-sse--websocket).
### gRPC
استخدم سطر طلب `GRPC` للخادم و`@grpc` للطريقة المؤهلة بالكامل. النص هو protobuf JSON:```http
### Get user
# @grpc users.UserService/GetUser
# @grpc-plaintext true
GRPC {{grpc.host}}
{"tenantId":"{{tenant.id}}"}
تمكين انعكاس الخادم (Server reflection) افتراضيًا. كما أن مجموعات الواصفات (Descriptor sets) واستدعاءات البث (streaming calls) مدعومة أيضًا. مثال: _examples/grpc.http. راجع وثائق gRPC.
استيراد OpenAPI
أنشئ طلبات، أو نماذج محاكاة (mocks)، أو كليهما من مستند OpenAPI محلي أو من عنوان http(s) URL:```bash
resterm --from-openapi _examples/openapi-spec.yml --http-out api.http --openapi-mode both
عمليات الجلب عن بُعد تحترم `--insecure` و `--proxy`. مثال على الإدخال: [`_examples/openapi-spec.yml`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/openapi-spec.yml). راجع [وثائق الاستيراد](https://github.com/unkn0wn-root/resterm/blob/main/docs/cli.md#import-examples).
### أنفاق SSH
قم بتعريف ملف تعريف SSH قبل الطلبات التي تستخدمه، ثم حدده باستخدام `use=`:```http
// Set key to choose a key file. Leave it out to use your SSH agent or a default key.
# @ssh file edge host=jump.example.com user=ops key=~/.ssh/id_ed25519
### Internal API
# @ssh use=edge
GET http://10.0.0.10/v1/health
الملفات الشخصية يمكن أن تكون على مستوى الملف أو على مستوى مساحة العمل، كما أن الأنفاق المضمنة لمرة واحدة مدعومة أيضًا. مثال: _examples/ssh.http. راجع وثائق SSH.
إعادة توجيه المنافذ في Kubernetes
@k8s يفتح إعادة توجيه منفذ مُدارة إلى pod أو service أو deployment أو statefulset:```http
Service health
@k8s namespace=default service=api port=http
GET http://api.default.svc.cluster.local/health
الأهداف يمكن أن تستخدم منافذ رقمية أو مسماة ويمكن حفظها كملفات تعريف قابلة لإعادة الاستخدام. مثال: [`_examples/k8s.http`](https://github.com/unkn0wn-root/resterm/blob/main/_examples/k8s.http). راجع [توثيق Kubernetes](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#kubernetes-port-forwards).
### التنسيق والربط
قم بتخصيص الألوان واختصارات لوحة المفاتيح باستخدام `themes/*.toml` و `bindings.toml` أو `bindings.json` في دليل الإعدادات. التوثيق: [`docs/resterm.md#theming`](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#theming) و [`docs/resterm.md#custom-bindings`](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#custom-bindings).
## التوثيق
- [`docs/resterm.md`](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md) يغطي صيغة الطلبات والتوجيهات والبرمجة النصية ووسائل النقل.
- [`docs/cli.md`](https://github.com/unkn0wn-root/resterm/blob/main/docs/cli.md) يغطي `resterm run` وأدوات الاستيراد والمجموعات والسجل.
- [التوافق](https://github.com/unkn0wn-root/resterm/blob/main/docs/resterm.md#compatibility) يشرح ضمانات التوافق الخاصة بـ Resterm للإصدار v1.
داخل واجهة TUI، اضغط `?` أو شغّل `:help`. استخدم `:docs` عندما تريد الدليل الكامل على الويب للإصدار المثبت.
## الترخيص
[رخصة Apache 2.0](https://github.com/unkn0wn-root/resterm/blob/main/LICENSE).