सेवाओं को लिखने के तरीके के बारे में बहुत सारी सामग्रियां हैं, जहां पहले आपको उपयोग करने के लिए कुछ रूपरेखा चुनने की आवश्यकता होती है, फिर हैंडलर, कॉन्फिग, लॉग, स्टोरेज इत्यादि की वायरिंग आती है, उस सेवा को कहीं तैनात करने का उल्लेख नहीं है। हम काफी समय से सेवाएं लिख रहे हैं और अधिक बार आप सामान को एक साथ चिपकाने की इस थकाऊ प्रक्रिया को छोड़ना नहीं चाहते हैं और बस कुछ उपयोगी कोड लिखना चाहते हैं।
इसलिए हमने Mify नामक एक टूल बनाया है — यह एक ओपन-सोर्स इन्फ्रास्ट्रक्चर बॉयलरप्लेट जनरेटर है, जो आज तक उपयोग की जाने वाली सर्वोत्तम प्रथाओं को लेते हुए एक सेवा बनाने में आपकी मदद करेगा। तो इस ट्यूटोरियल में, हम दिखाएंगे कि एक क्लासिक उदाहरण के साथ Mify का उपयोग करके एक सरल सेवा कैसे बनाई जाए - एक टू-डू ऐप।
हमारे GitHub से Mify प्राप्त करें: https://github.com/mify-io/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 , लेकिन अगले लेखों के लिए बने रहें।
यहाँ भी प्रकाशित