تخطَّ إلى المستندات
Go

الإعداد

كل خيار للعميل، وما يقرؤه من البيئة، وما يرفضه.

الخيارات

client.go
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 أيضًا على استدعاء واحد.

deadline.go
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. تقبل كل دالة الخيارات التي يسردها مدخلها في المرجع، والخيار الذي لا ينطبق يُرفض قبل إرسال أي شيء.

another_workspace.go
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 أي مسار ببيانات اعتماد العميل وعنوانه الأساسي ومهلته وسياسة إعادة المحاولة لديه. يجب أن يبدأ المسار بـ / واحدة، والمسار الذي يخرج عن أصل العنوان الأساسي يُرفض.

request.go
label, err := client.Request(ctx, http.MethodPost, "/labels", openemail.Body{"name": "Invoices"})if err != nil {	return err} fmt.Println(label)