منصوبے کے بارے میں
# گو 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
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.