कॉन्फ़िगरेशन
क्लाइंट का हर विकल्प, वह एनवायरनमेंट से क्या पढ़ता है, और क्या अस्वीकार करता है।
विकल्प
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पर बेस URL, जो वह पता है जिस पर सर्वर सुनता है। उसी पोर्ट के साथ127.0.0.1इस्तेमाल करें।- खाली id, या सिर्फ़ बिंदुओं से बना id, जिसे URL पार्सर हटा देगा।
- रीडायरेक्ट का पालन करना। डिफ़ॉल्ट HTTP क्लाइंट उसे एरर के रूप में लौटाता है, इसलिए क्रेडेंशियल कभी किसी दूसरे होस्ट तक नहीं जाता।
किसी क्लाइंट, विकल्प या एरर को प्रिंट करने पर क्रेडेंशियल कभी नहीं दिखता। कुंजी, टोकन और कस्टम हेडर के मान fmt, log/slog और encoding/json के आउटपुट से बाहर रखे जाते हैं।
बिना मेथड वाला एंडपॉइंट
client.Request क्लाइंट के क्रेडेंशियल, बेस URL, टाइमआउट और रीट्राई नीति के साथ किसी भी पाथ को कॉल करता है। पाथ एक ही / से शुरू होना चाहिए, और जो पाथ बेस URL के ओरिजिन से बाहर जाता है वह अस्वीकार कर दिया जाता है।
label, err := client.Request(ctx, http.MethodPost, "/labels", openemail.Body{"name": "Invoices"})if err != nil { return err} fmt.Println(label)