Swift पर माइक्रोसर्विसेज़: पेशेवरों के लिए आर्किटेक्चर और अभ्यास

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: क्यों Swift माइक्रोसर्विसेज़ के लिए एक परिपक्व प्लेटफॉर्म है

\n

परंपरागत रूप से Swift को iOS और macOS डेवलपमेंट से जोड़ा जाता है। हालांकि, Vapor और Hummingbird फ्रेमवर्क, साथ ही SwiftNIO लाइब्रेरी के आगमन के साथ, Swift सर्वर-साइड डेवलपमेंट के लिए एक पूर्ण भाषा बन गया है। Swift पर माइक्रोसर्विस आर्किटेक्चर सिर्फ एक ट्रेंड नहीं है, बल्कि उन प्रोजेक्ट्स के लिए एक व्यावहारिक विकल्प है जहां प्रदर्शन, टाइप सुरक्षा और Apple इकोसिस्टम के साथ मूल एकीकरण महत्वपूर्ण है।

\n

इस लेख में, हम Swift पर माइक्रोसर्विसेज़ बनाने के उन्नत पहलुओं पर विचार करेंगे: ट्रांसपोर्ट चुनने से लेकर Docker में डिप्लॉय करने तक। कोड उदाहरण Swift 5.9+ और macOS/Linux पर केंद्रित हैं।

\n\n

Swift पर माइक्रोसर्विस आर्किटेक्चर: मोनोलिथ से वितरित सिस्टम तक

\n

फ्रेमवर्क चुनना: Vapor बनाम Hummingbird

\n

प्रोडक्शन समाधानों के लिए Vapor 4 (स्थिर, व्यापक समुदाय) या Hummingbird (हल्का, न्यूनतम) की सिफारिश की जाती है। दोनों SwiftNIO के ऊपर बनाए गए हैं।

\n

Vapor पर माइक्रोसर्विस की मूल संरचना में शामिल हैं:

\n
    \n
  • Routes (रूट्स) — HTTP अनुरोधों को संभालना।
  • \n
  • Controllers (कंट्रोलर) — व्यावसायिक तर्क।
  • \n
  • Services (सर्विसेज़) — पृथक मॉड्यूल (डेटाबेस, बाहरी API)।
  • \n
  • Models (मॉडल) — DB के साथ काम करने के लिए Fluent ORM।
  • \n
\n\n
// Vapor पर माइक्रोसर्विस की मूल संरचना का उदाहरण\nimport Vapor\n\nfunc routes(_ app: Application) throws {\n    let orderController = OrderController()\n    app.get("orders", ":id", use: orderController.getOrder)\n    app.post("orders", use: orderController.createOrder)\n}\n\nfinal class OrderController {\n    func getOrder(req: Request) async throws -> Order {\n        let orderID = try req.parameters.require("id", as: UUID.self)\n        return try await Order.find(orderID, on: req.db) ?? Abort(.notFound)\n    }\n}
\n\n

प्रोटोकॉल और डिपेंडेंसी इंजेक्शन

\n

ढीले युग्मन के लिए प्रोटोकॉल का उपयोग करें। इससे परीक्षण और घटकों के प्रतिस्थापन में आसानी होती है।

\n
protocol PaymentServiceProtocol {\n    func processPayment(amount: Double, currency: String) async throws -> PaymentResult\n}\n\nfinal class StripeService: PaymentServiceProtocol {\n    func processPayment(amount: Double, currency: String) async throws -> PaymentResult {\n        // Stripe API कॉल करने का तर्क\n    }\n}\n\n// Vapor DI-कंटेनर में पंजीकरण\napp.services.register(PaymentServiceProtocol.self) { _ in StripeService() }
\n\n

उन्नत संचार: gRPC और Async/Await

\n

REST के बजाय gRPC क्यों

\n

आंतरिक माइक्रोसर्विसेज़ के लिए, gRPC REST से बेहतर है क्योंकि:

\n
    \n
  • Protocol Buffers के माध्यम से सख्त टाइपिंग।
  • \n
  • बाइनरी प्रोटोकॉल (कम ट्रैफिक)।
  • \n
  • स्ट्रीमिंग के लिए अंतर्निहित समर्थन।
  • \n
\n

Swift grpc-swift लाइब्रेरी के माध्यम से gRPC का समर्थन करता है। सेवा परिभाषा का उदाहरण:

\n\n
// user.proto\nservice UserService {\n    rpc GetUser (UserRequest) returns (UserResponse);\n    rpc ListUsers (Empty) returns (stream UserResponse);\n}\n\nmessage UserRequest {\n    string user_id = 1;\n}\n\nmessage UserResponse {\n    string id = 1;\n    string name = 2;\n    string email = 3;\n}
\n\n

Swift कोड जनरेशन:

\n
protoc --swift_out=. --grpc-swift_out=. user.proto
\n\n

Swift पर सर्वर कार्यान्वयन:

\n
import GRPC\nimport NIO\n\nfinal class UserServiceImpl: UserServiceProvider {\n    func getuser(request: UserRequest, context: StatusOnlyCallContext) -> EventLoopFuture {\n        let user = UserResponse.with {\n            $0.id = request.userID\n            $0.name = "John Doe"\n            $0.email = "john@example.com"\n        }\n        return context.eventLoop.makeSucceededFuture(user)\n    }\n}
\n\n

माइक्रोसर्विसेज़ में Async/Await

\n

Swift 5.5+ ने लाया

ब्लॉग

पुस्तक अनुशंसाएँ