پیکربندی
هر گزینهٔ کلاینت، آنچه از محیط میخواند و آنچه رد میکند.
گزینهها
client := openemail.New( openemail.WithAPIKey(os.Getenv("OPENEMAIL_API_KEY")), openemail.WithBaseURL("https://api.openemail.uk"), openemail.WithTimeout(30*time.Second), openemail.WithMaxRetries(2), openemail.WithHeader("X-Team", "billing"),) if err := client.Err(); err != nil { return err} fmt.Println(client.Mode(), client.BaseURL())| گزینه | چه میکند |
|---|---|
| WithAPIKey | کلید API فضای کاری که با oe_live_ یا oe_test_ آغاز میشود. در یک فراخوانی، فقط برای همان فراخوانی با کلید دیگری عمل میکند. |
| WithAccessToken | یک توکن دسترسی OAuth، برای برنامهای که یک شخص متصل کرده است. یک کلید یا یک توکن بدهید، نه هر دو. |
| WithAccessTokenFunc | تابعی که توکن دسترسی را برمیگرداند. پیش از هر درخواست اجرا میشود، پس جای تمدید توکن همینجاست. |
| WithBaseURL | مبدأ API. به میزبان سادهای مانند localhost:2222 طرح آن افزوده میشود. |
| WithHTTPClient | یک *http.Client، یا هر چیزی با همان متد Do. آزمون اینجا یک کلاینت ساختگی میدهد. |
| WithTimeout | اینکه یک تلاش چقدر میتواند طول بکشد. پیشفرض 30 ثانیه است، صفر آن را خاموش میکند، و بارگذاریها دستکم ده دقیقه صبر میکنند. |
| WithMaxRetries | تعداد دفعاتی که یک درخواست ناموفق دوباره امتحان میشود. پیشفرض 2 است، و 0 یک بار میفرستد. |
| WithUserAgent | سرآیند User-Agent را جایگزین میکند، که openemail-go/ و نسخه است. |
| WithHeader | یک سرآیند به هر درخواست اضافه میکند. |
هر چه را ننویسید از محیط خوانده میشود: OPENEMAIL_API_KEY، سپس OPENEMAIL_ACCESS_TOKEN، و OPENEMAIL_BASE_URL. client.Mode() میگوید کلید یک کلید live است یا test.
زمینه و مهلتها
هر متد نخست یک context.Context میگیرد. لغو آن فراخوانی را بیدرنگ متوقف میکند، و سررسید آن کل فراخوانی را همراه با تلاشهای دوباره محدود میکند، در حالی که WithTimeout هر تلاش را محدود میکند. WithTimeout روی یک فراخوانی تکی هم کار میکند.
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)defer cancel() thread, err := client.Threads.Get(ctx, "CAHk7pQ2x9LmZ4-mail.example.com", openemail.WithTimeout(5*time.Second))if err != nil { return err} fmt.Println(thread.Int("messageCount"))گزینههای یک فراخوانی
پارامترهای پرسوجو و تنظیمات فراخوانی تابعهایی هستند که پس از آرگومانها داده میشوند، مانند openemail.WithLimit، openemail.WithCursor و openemail.WithIdempotencyKey. هر متد گزینههایی را میپذیرد که مدخلش در مرجع فهرست کرده است، و گزینهای که به آن مربوط نیست پیش از ارسال هر چیزی رد میشود.
page, err := client.Emails.List(ctx, openemail.WithStatus("failed", "bounced"), openemail.WithLimit(50), openemail.WithAPIKey(os.Getenv("OTHER_WORKSPACE_KEY")),)if err != nil { return err} fmt.Println(len(page.Items), page.HasMore)آنچه کلاینت رد میکند
- کلیدی که با
oe_live_یاoe_test_شروع نمیشود، و کلیدی همراه با یک توکن دسترسی. - فرستادن اعتبارنامه روی
http:ساده، مگر آنکه سرور روی همین دستگاه درlocalhost، یک نشانی127.x.x.xیا::1باشد. - نشانی پایه روی
0.0.0.0، که نشانیای است که سرور روی آن گوش میدهد. از127.0.0.1با همان درگاه استفاده کنید. - شناسهٔ خالی، یا شناسهای که فقط از نقطه ساخته شده و تجزیهگر URL آن را حذف میکند.
- دنبال کردن تغییر مسیر. کلاینت HTTP پیشفرض آن را بهصورت خطا برمیگرداند، پس اعتبارنامه هرگز به میزبان دیگری نمیرود.
چاپ کردن یک کلاینت، یک گزینه یا یک خطا هرگز اعتبارنامه را نشان نمیدهد. کلید، توکن و مقدار سرآیندهای سفارشی از خروجی fmt، log/slog و encoding/json بیرون میمانند.
نقطهٔ پایانی بدون متد
client.Request هر مسیری را با اعتبارنامه، نشانی پایه، مهلت و سیاست تلاش دوبارهٔ کلاینت فراخوانی میکند. مسیر باید با یک / تکی شروع شود، و مسیری که از مبدأ نشانی پایه بیرون برود رد میشود.
label, err := client.Request(ctx, http.MethodPost, "/labels", openemail.Body{"name": "Invoices"})if err != nil { return err} fmt.Println(label)