सेवाओं को लिखने के तरीके के बारे में बहुत सारी सामग्रियां हैं, जहां पहले आपको उपयोग करने के लिए कुछ रूपरेखा चुनने की आवश्यकता होती है, फिर हैंडलर, कॉन्फिग, लॉग, स्टोरेज इत्यादि की वायरिंग आती है, उस सेवा को कहीं तैनात करने का उल्लेख नहीं है। हम काफी समय से सेवाएं लिख रहे हैं और अधिक बार आप सामान को एक साथ चिपकाने की इस थकाऊ प्रक्रिया को छोड़ना नहीं चाहते हैं और बस कुछ उपयोगी कोड लिखना चाहते हैं। इसलिए हमने Mify नामक एक टूल बनाया है — यह एक ओपन-सोर्स इन्फ्रास्ट्रक्चर बॉयलरप्लेट जनरेटर है, जो आज तक उपयोग की जाने वाली सर्वोत्तम प्रथाओं को लेते हुए एक सेवा बनाने में आपकी मदद करेगा। तो इस ट्यूटोरियल में, हम दिखाएंगे कि एक क्लासिक उदाहरण के साथ Mify का उपयोग करके एक सरल सेवा कैसे बनाई जाए - एक टू-डू ऐप। आवश्यक शर्तें 1.18+, स्थापित करें गो डॉकर हमारे 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 इस बिंदु पर यह सेवा काफी खाली है, इसलिए हमें इसमें एपीआई जोड़ने की जरूरत है। एपीआई को परिभाषित करना आप फ़ाइल में टूडू-बैकएंड के लिए ओपनएपीआई स्कीमा पा सकते हैं। कार्यक्षेत्र की जड़ में स्कीमा निर्देशिका एक ऐसा स्थान है जहाँ Mify से संबंधित सभी सेवा कॉन्फ़िगरेशन संग्रहीत हैं। schemas/todo-backend/api/api.yaml चलिए आपके टूडू बैकएंड के लिए एक सरल 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 https://gist.github.com/chebykinn/0c2905f07d76082bd9d63a56a720371c?embedable=true यह भंडारण के लिए इंटरफेस को परिभाषित करने के लिए भी एक अच्छी जगह है, जो एप्लिकेशन से दृढ़ता तर्क को अलग करने के लिए उपयोगी है। इस ट्यूटोरियल में, हम मेमोरी में मॉक स्टोरेज का उपयोग करेंगे, लेकिन Mify पोस्टग्रेज का भी समर्थन करता है, जिसे हम बाद में एक अनुवर्ती लेख में जोड़ सकते हैं। go-services/internal/todo-backend/storage/todo_mem.go: https://gist.github.com/chebykinn/1769d6881e929bfb225fc203c48e1496?embedable=true यह सब तर्क के लिए है, हमें इसे हैंडलर में जोड़ने की जरूरत है। कार्यान्वयन हैंडलर POST विधि के लिए , और go-services/internal/todo-backend/handlers/todos/service.go दूसरों के लिए go-services/internal/todo-backend/handlers/todos/id/service.go यहाँ POST विधि के स्टब का एक उदाहरण दिया गया है: https://gist.github.com/chebykinn/e49b483330ea7c84a1b8082b0a86fc01?embedable=true अब, सभी हैंडलर्स को लागू करते हैं। : go-services/internal/todo-backend/handlers/todos/service.go https://gist.github.com/chebykinn/6f88c03680167c4dc286f1b6226341f9?embedable=true आयात को अपडेट करना न भूलें: 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 https://gist.github.com/chebykinn/98d2d051671dfbefb464b1f59b159d15?embedable=true और यहाँ उनके लिए आयात भी हैं: 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 https://gist.github.com/chebykinn/702f24abe035cd99dbc06c4447ecc755?embedable=true परीक्षण फिर से सबसे पहले, हम POST अनुरोध के साथ एक नया टूडू नोट जोड़ सकते हैं: जांचें कि क्या इसे GET अनुरोध के साथ जोड़ा गया है: इसे PUT अनुरोध के साथ अपडेट करें: इसे हटा: और यह जांचने के लिए एक बार फिर से GET चलाएँ कि क्या इसे हटा दिया गया था: आगे क्या होगा स्थायी भंडारण, जैसे पोस्टग्रेज, विन्यास, प्रमाणीकरण मिडलवेयर, क्लाउड पर परिनियोजन। इनमें से अधिकांश सामग्री हमारे डॉक्स में शामिल है, इसलिए उन्हें देखें: , लेकिन अगले लेखों के लिए बने रहें। https://mify.io/docs भी प्रकाशित यहाँ