paint-brush
दोहराए गए बॉयलरप्लेट के बिना गो में एक विश्वसनीय एपीआई सेवा का निर्माणद्वारा@ichebykin
1,160 रीडिंग
1,160 रीडिंग

दोहराए गए बॉयलरप्लेट के बिना गो में एक विश्वसनीय एपीआई सेवा का निर्माण

द्वारा Mify6m2023/03/06
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

हम काफी समय से सेवाएं लिख रहे हैं और अधिक बार नहीं आप सामान को एक साथ चिपकाने की इस सभी थकाऊ प्रक्रिया को छोड़ना चाहते हैं और सिर्फ उपयोगी कोड लिखना चाहते हैं, इसलिए हमने Mify - एक ओपन-सोर्स इंफ्रास्ट्रक्चर बॉयलरप्लेट जनरेटर बनाया। इस ट्यूटोरियल में, हम दिखाएंगे कि क्लासिक उदाहरण के साथ Mify का उपयोग करके एक सरल सेवा कैसे बनाई जाए - एक टू-डू ऐप।
featured image - दोहराए गए बॉयलरप्लेट के बिना गो में एक विश्वसनीय एपीआई सेवा का निर्माण
Mify HackerNoon profile picture



सेवाओं को लिखने के तरीके के बारे में बहुत सारी सामग्रियां हैं, जहां पहले आपको उपयोग करने के लिए कुछ रूपरेखा चुनने की आवश्यकता होती है, फिर हैंडलर, कॉन्फिग, लॉग, स्टोरेज इत्यादि की वायरिंग आती है, उस सेवा को कहीं तैनात करने का उल्लेख नहीं है। हम काफी समय से सेवाएं लिख रहे हैं और अधिक बार आप सामान को एक साथ चिपकाने की इस थकाऊ प्रक्रिया को छोड़ना नहीं चाहते हैं और बस कुछ उपयोगी कोड लिखना चाहते हैं।


इसलिए हमने Mify नामक एक टूल बनाया है — यह एक ओपन-सोर्स इन्फ्रास्ट्रक्चर बॉयलरप्लेट जनरेटर है, जो आज तक उपयोग की जाने वाली सर्वोत्तम प्रथाओं को लेते हुए एक सेवा बनाने में आपकी मदद करेगा। तो इस ट्यूटोरियल में, हम दिखाएंगे कि एक क्लासिक उदाहरण के साथ Mify का उपयोग करके एक सरल सेवा कैसे बनाई जाए - एक टू-डू ऐप।

आवश्यक शर्तें

इस ट्यूटोरियल को शुरू करने से पहले, यहाँ पूरे उदाहरण का लिंक दिया गया है: https://github.com/mify-io/todo-app-example

प्रोजेक्ट बनाना

Mify को इंस्टॉल करने के बाद, प्रोजेक्ट शुरू करने के लिए आपको वर्कस्पेस बनाने की जरूरत है:

 $ mify init todo-app $ cd todo-app


नए कार्यक्षेत्र में आने के बाद, दौड़ें:

 $ mify add service todo-backend


अब, यह आपके टू-डू बैकएंड के लिए एक गो टेम्प्लेट बनाएगा। यहाँ सभी उत्पन्न फ़ाइलों के साथ कार्यक्षेत्र का एक सरलीकृत ट्री है:

 . ├── go-services │ ├── cmd │ │ ├── dev-runner │ │ │ └── main.go │ │ └── todo-backend │ │ ├── Dockerfile │ │ └── main.go │ ├── go.mod │ ├── go.sum │ └── internal │ ├── pkg │ │ └── generated │ │ ├── configs │ │ │ └── ... │ │ ├── consul │ │ │ └── ... │ │ ├── logs │ │ │ └── ... │ │ └── metrics │ │ └── ... │ └── todo-backend │ ├── app │ │ ├── request_extra.go │ │ ├── router │ │ │ └── router.go │ │ └── service_extra.go │ └── generated │ ├── api | | └── ... │ ├── app │ │ └── ... │ ├── apputil │ │ └── ... │ └── core │ └── ... ├── schemas │ └── todo-backend │ ├── api │ │ └── api.yaml │ └── service.mify.yaml └── workspace.mify.yaml


Mify सामान्य गो लेआउट में से एक का अनुसरण करता है, जो एक रिपॉजिटरी में कई सेवाओं के लिए उपयुक्त है। internal/pkg/generated में कॉन्फ़िगरेशन, लॉग और मेट्रिक्स के लिए सामान्य पुस्तकालय हैं जिन्हें कई सेवाओं के लिए पुन: उपयोग किया जा सकता है। आपकी सेवा गो-टू निर्देशिका internal/todo-backend में है।

इस बिंदु पर यह सेवा काफी खाली है, इसलिए हमें इसमें एपीआई जोड़ने की जरूरत है।

एपीआई को परिभाषित करना

आप schemas/todo-backend/api/api.yaml फ़ाइल में टूडू-बैकएंड के लिए ओपनएपीआई स्कीमा पा सकते हैं। कार्यक्षेत्र की जड़ में स्कीमा निर्देशिका एक ऐसा स्थान है जहाँ Mify से संबंधित सभी सेवा कॉन्फ़िगरेशन संग्रहीत हैं।


चलिए आपके टूडू बैकएंड के लिए एक सरल CRUD API बनाते हैं:

  • नए टू-डू नोट्स जोड़ने के लिए POST /todos
  • PUT,GET,DELETE /todos/{id} उन्हें अपडेट करने, पुनर्प्राप्त करने और हटाने के लिए।

इस API के लिए आपका OpenAPI स्कीमा इस प्रकार दिखेगा:

https://gist.github.com/chebykinn/5dc7b30a2a57a1ab4584895131295e1f

पिछले स्कीमा को इस स्कीमा से बदलें और mify generate चलाएँ। हर बार जब आप स्कीमा अपडेट करते हैं तो आप इसे चला सकते हैं और यह सभी बदली हुई सामग्री को पुन: उत्पन्न करेगा।

निर्माण और परीक्षण

 $ cd go-services $ go mod tidy $ go run ./cmd/todo-backend


आपको स्टार्टअप लॉग इस तरह देखना चाहिए:

आप starting api server में सर्विस पोर्ट देख सकते हैं, इसे पोस्टमैन पर कॉपी कर सकते हैं, और कुछ एपीआई हैंडलर को कॉल करने का प्रयास कर सकते हैं:

आप देख सकते हैं कि हैंडलर ने कुछ भी नहीं लौटाया, जो अपेक्षित है क्योंकि जैसा कि त्रुटि से पता चलता है, यह अभी तक लागू नहीं हुआ है।

मॉडल और मॉक स्टोरेज जोड़ना

सबसे पहले, हमें टूडू नोट के लिए एक मॉडल बनाने की जरूरत है, हम इसे domain पैकेज में रखेंगे

go-services/internal/todo-backend/domain/todo.go में :

यह भंडारण के लिए इंटरफेस को परिभाषित करने के लिए भी एक अच्छी जगह है, जो एप्लिकेशन से दृढ़ता तर्क को अलग करने के लिए उपयोगी है। इस ट्यूटोरियल में, हम मेमोरी में मॉक स्टोरेज का उपयोग करेंगे, लेकिन Mify पोस्टग्रेज का भी समर्थन करता है, जिसे हम बाद में एक अनुवर्ती लेख में जोड़ सकते हैं। go-services/internal/todo-backend/storage/todo_mem.go:

यह सब तर्क के लिए है, हमें इसे हैंडलर में जोड़ने की जरूरत है।

कार्यान्वयन हैंडलर

POST विधि के लिए go-services/internal/todo-backend/handlers/todos/service.go , और

दूसरों के लिए go-services/internal/todo-backend/handlers/todos/id/service.go

यहाँ POST विधि के स्टब का एक उदाहरण दिया गया है:

अब, सभी हैंडलर्स को लागू करते हैं।

go-services/internal/todo-backend/handlers/todos/service.go :

आयात को अपडेट करना न भूलें:

 import ( "net/http" "strconv" "example.com/namespace/todo-app/go-services/internal/todo-backend/domain" "example.com/namespace/todo-app/go-services/internal/todo-backend/generated/api" "example.com/namespace/todo-app/go-services/internal/todo-backend/generated/apputil" "example.com/namespace/todo-app/go-services/internal/todo-backend/generated/core" "example.com/namespace/todo-app/go-services/internal/todo-backend/handlers" )


go-services/internal/todo-backend/handlers/todos/id/service.go :

और यहाँ उनके लिए आयात भी हैं:

 import ( "errors" "fmt" "net/http" "strconv" "example.com/namespace/todo-app/go-services/internal/todo-backend/domain" "example.com/namespace/todo-app/go-services/internal/todo-backend/generated/api" "example.com/namespace/todo-app/go-services/internal/todo-backend/generated/apputil" "example.com/namespace/todo-app/go-services/internal/todo-backend/generated/core" "example.com/namespace/todo-app/go-services/internal/todo-backend/handlers" "example.com/namespace/todo-app/go-services/internal/todo-backend/storage" )


हैंडलर का तर्क बहुत आसान है, हम केवल जेनरेट किए गए ओपनएपीआई मॉडल को हमारे एप्लिकेशन में एक और पीछे परिवर्तित कर रहे हैं, और कोड में डुप्लिकेशन से बचने के लिए, टोडोनोड प्रतिक्रिया बनाने के लिए यहां एक सहायक है, जिसका उपयोग इन कार्यान्वयन में किया जाता है:

go-services/internal/todo-backend/handlers/common.go :

परीक्षण फिर से

सबसे पहले, हम POST अनुरोध के साथ एक नया टूडू नोट जोड़ सकते हैं:

जांचें कि क्या इसे GET अनुरोध के साथ जोड़ा गया है:

इसे PUT अनुरोध के साथ अपडेट करें:

इसे हटा:

और यह जांचने के लिए एक बार फिर से GET चलाएँ कि क्या इसे हटा दिया गया था:

आगे क्या होगा

  • स्थायी भंडारण, जैसे पोस्टग्रेज,

  • विन्यास,

  • प्रमाणीकरण मिडलवेयर,

  • क्लाउड पर परिनियोजन।


इनमें से अधिकांश सामग्री हमारे डॉक्स में शामिल है, इसलिए उन्हें देखें: https://mify.io/docs , लेकिन अगले लेखों के लिए बने रहें।


यहाँ भी प्रकाशित