منصوبے کے بارے میں

# گو REST کلائنٹ لائبریری یہ پروجیکٹ `.http` فائلز میں تعین کردہ HTTP درخواستوں کو چلانے کے لیے گو لائبریری اور کمینڈ لائن ٹول فراہم کرتا ہے، جو فارمیٹ جیٹ برینز آئی ڈیز (JetBrains IDEs) اور VS Code REST Client ایکسٹینشن کی طرف سے مقبول کیا گیا تھا۔ اس کا مقصد ان ٹولز کے ساتھ مکمل مطابقت قائم کرنا ہے، تاکہ ڈویلپرز ایک ہی درخواست کی فائلز کو آئی ڈی میں مینوئل ٹیسٹنگ اور گو میں خودکار اینڈ ٹو اینڈ (E2E) ٹیسٹنگ دونوں کے لیے استعمال کر سکیں۔ ## اہم خصوصیات - **جیٹ برینز/VS Code مطابقت**: مشہور آئی ڈی ایکسٹینشنز کی طرح `.http` فائلز کو اسی سنٹیکس، متغیرات اور رویے کے ساتھ پارس کرتا ہے۔ - **متغیرات کی تبدیلی**: حسب ضرورت متغیرات، ماحولیاتی متغیرات، اور `{{$guid}}`، `{{$randomInt}}`، `{{$timestamp}}`، اور `{{$datetime}}` جیسے سسٹم متغیرات کی حمایت کرتا ہے۔ - **ردعمل کی چیننگ**: اسی فائل میں دیگر درخواستوں سے ردعمل حوالہ دیں، مثال کے طور پر: `{{authenticate.response.body.token}}`۔ - **درخواست حوالہ جات**: پری ری کوئزٹ درخواستیں چلانے کے لیے `@ref` (فی رن کیچ شد) یا `@forceRef` (ہمیشہ دوبارہ چلاتا ہے) استعمال کریں، اور `@import` کا استعمال فائلز کے درمیان نامزد درخواستیں شیئر کرنے کے لیے کریں۔ - **درخواست کنٹرول**: `@disabled` کے ساتھ درخواستیں سکیپ کریں، `@sleep <ms>` کے ساتھ بھیجنے سے پہلے روکیں، اور `@loop` کے ساتھ درخواستیں لوپ کریں۔ - **ردعمل کی تصدیق**: `{{$any}}`، `{{$regexp}}`، اور `{{$anyGuid}}` جیسے پلیس ہولڈرز کے ساتھ `.hresp` فائلز کے مقابلے میں ردعمل کا موازنہ کریں۔ - **فائل میں متعدد درخواستیں**: درخواستوں کو `###` سے الگ کریں۔ - **E2E ٹیسٹنگ کے لیے تیار**: خودکار انٹیگریشن ٹیسٹوں کے لیے ڈیزائن کیا گیا ہے۔ ## HTTP فائل فارمیٹ `.http` فائلز عام متن کی فائلز ہیں جو HTTP درخواستوں کو بیان کرتی ہیں۔ ایک درخواست میں ایک اختیاری نام، طریقہ کار (method)، URL، ہیڈرز، اور باڈی شامل ہوتی ہے۔ ```http ### Request Name METHOD URL Header1: value1 body content ``` ### مثال ```http @baseUrl = https://api.example.com @userId = 123 ### Get user profile GET {{baseUrl}}/users/{{userId}} Authorization: Bearer {{authToken}} X-Request-ID: {{$guid}} ``` ## لائبریری کا استعمال ### انسٹالیشن ```bash go get github.com/bmcszk/go-restclient ``` ### گو میں درخواستوں کو چلائیں ```go package main import ( "context" "log" "github.com/bmcszk/go-restclient" ) func main() { client, _ := restclient.NewClient( restclient.WithVars(map[string]interface{}{ "authToken": "your-token-here", }), ) responses, _ := client.ExecuteFile(context.Background(), "requests.http") for i, resp := range responses { if resp.Error != nil { log.Printf("Request %d failed: %v", i+1, resp.Error) } else { log.Printf("Request %d: %d %s", i+1, resp.StatusCode, resp.Status) } } } ``` ### کلائنٹ آپشنز ```go client, err := restclient.NewClient( restclient.WithBaseURL("https://api.example.com"), restclient.WithDefaultHeader("X-API-Key", "secret"), restclient.WithHTTPClient(customHTTPClient), restclient.WithVars(variables), ) ``` ## CLI استعمال `restclient` CLI کمینڈ لائن سے `.http` فائلز چلاتا ہے۔ ### انسٹالیشن ```bash go install github.com/bmcszk/go-restclient/cmd/restclient@latest ``` ### بنیادی احکامات ```bash restclient -f requests.http --all restclient -f requests.http -n "get user" restclient -f requests.http -i 0 restclient --version ``` ### درخواستوں کی فہرست ```bash restclient -f requests.http --list ``` ### ایک واحد درخواست چلائیں نام کے ذریعے (حروف کی حساسیت نہیں): ```bash restclient -f requests.http -n "create user" ``` صفر سے شروع ہونے والے انڈیکس کے ذریعے: ```bash restclient -f requests.http -i 0 ``` ### کمینڈ لائن متغیرات ```bash restclient -f requests.http -D token=abc123 -D env=prod ``` ### پری ری کوئزٹ درخواستیں ```bash restclient -f requests.http -n "get protected" -A authenticate ``` ### غلطیوں پر ناکام HTTP 4xx/5xx ردعمل پر کوڈ 1 کے ساتھ نکلیں: ```bash restclient -f requests.http -E ``` ### آؤٹ پٹ فارمیٹس ```bash # صرف باڈی restclient -f requests.http -o body # JSON پاتھ اخذ کرنا restclient -f requests.http -o jsonpath "data.users[0].name" # ماحولیاتی متغیر فارمیٹ restclient -f requests.http -o env "token" ``` ### CLI فلگز | مختصر | لمبا | تفصیل | | ----- | ---- | ----------- | | `-f` | `--file` | درخواست فائل کا راستہ (ضروری) | | `-n` | `--name` | نام کے ذریعے درخواست چلائیں | | `-i` | `--index` | انڈیکس کے ذریعے درخواست چلائیں | | | `--all` | فائل میں تمام درخواستیں چلائیں | | `-e` | `--expected` | متوقع ردعمل فائل | | | `--e-name` | متوقع ردعمل کا نام | | | `--e-index` | متوقع ردعمل کا انڈیکس | | `-l` | `--list` | درخواستوں کی فہرست | | `-E` | `--fail-on-error` | 4xx/5xx پر ناکام | | `-o` | `--output` | آؤٹ پٹ فارمیٹ | | `-A` | `--after` | پری ری کوئزٹ درخواست | | `-D` | `--define` | متغیر تعریف کریں (دہرایا جا سکتا ہے) | ## ردعمل کی تصدیق ردعمل کی تصدیق کے لیے `.hresp` فائلز بنائیں۔ **responses.hresp:** ```http HTTP/1.1 200 OK Content-Type: application/json { "id": "{{$anyGuid}}", "name": "{{$any}}", "createdAt": "{{$anyTimestamp}}" } ``` **گو میں تصدیق کریں:** ```go err := client.ValidateResponses("responses.hresp", responses...) if err != nil { log.Fatal("Validation failed:", err) } ``` ### تصدیقی پلیس ہولڈرز - `{{$any}}` - کسی بھی متن سے ملتا ہے - `{{$regexp ``pattern``}}` - ریگولر ایکسپریشن پیٹرن (بیک ٹکس میں) - `{{$anyGuid}}` - UUID فارمیٹ - `{{$anyTimestamp}}` - یونکس ٹائم اسٹیمپ - `{{$anyDatetime 'format'}}` - ڈیٹ ٹائم (rfc1123، iso8601، یا حسب ضرورت) ## استعمال کے معاملات ### مینوئل ٹیسٹنگ ترقی کے دوران APIs کو ٹیسٹ کرنے کے لیے اپنی پسندیدہ آئی ڈی ایکسٹینشن استعمال کریں۔ ### خودکار E2E ٹیسٹنگ ```go func TestUserAPI(t *testing.T) { client, _ := restclient.NewClient( restclient.WithBaseURL(testServer.URL), ) responses, err := client.ExecuteFile(context.Background(), "user_tests.http") require.NoError(t, err) err = client.ValidateResponses("user_expected.hresp", responses...) require.NoError(t, err) } ``` ## ڈویلپمنٹ ### پری ری کوئززٹس - Go 1.21+ ### احکامات ```bash make check # تمام چیکس چلائیں (lint، test، build) ``` ## لائسنس MIT License