الإعداد
كل خيار للعميل، وما يقرؤه من البيئة، وما يرفضه.
الخيارات
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 | أصل الواجهة البرمجية. المضيف المجرد مثل 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. - عنوان URL أساسي على
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)