परिचय: Swift REST API के लिए क्यों उपयुक्त है?
\n\nजब सर्वर डेवलपमेंट की बात आती है, तो Swift पहला भाषा नहीं है जो दिमाग में आता है। हालांकि, Vapor फ्रेमवर्क (और इसके विकल्प Kitura) के आगमन के साथ, Swift REST API बनाने के लिए एक पूर्ण उपकरण बन गया है। सर्वर पर Swift का उपयोग क्यों करें? पहला, यह iOS, macOS और बैकएंड के लिए एक ही भाषा है - आप डेटा मॉडल का पुन: उपयोग कर सकते हैं। दूसरा, Swift तेज़, सुरक्षित है और async/await के माध्यम से एसिंक्रोनसिटी के लिए उत्कृष्ट समर्थन रखता है।
\n\nइस मार्गदर्शिका में, हम Vapor फ्रेमवर्क का उपयोग करके Swift में कार्यों की सूची (Todo list) प्रबंधित करने के लिए एक सरल REST API बनाएंगे। आप सर्वर सेट अप करना, रूट बनाना, JSON के साथ काम करना और API का परीक्षण करना सीखेंगे। पूरी प्रक्रिया में लगभग 30 मिनट लगेंगे।
\n\nचरण 1: प्रोजेक्ट इंस्टॉल और सेट अप करना
\n\nकोड लिखने से पहले, Vapor Toolbox इंस्टॉल करना होगा - Vapor प्रोजेक्ट बनाने और प्रबंधित करने के लिए एक कमांड-लाइन उपयोगिता।
\n\nVapor Toolbox इंस्टॉल करना
\nटर्मिनल खोलें और निष्पादित करें:
\nbrew install vapor\nयदि आपके पास Homebrew नहीं है, तो इसे brew.sh से इंस्टॉल करें।
\n\nनया प्रोजेक्ट बनाना
\nहम TodoAPI नाम से एक नया प्रोजेक्ट बनाएंगे:
vapor new TodoAPI -n\ncd TodoAPI\nफ्लैग -n का अर्थ है "बिना उदाहरण के" - हमें एक साफ टेम्पलेट मिलेगा।
सर्वर चलाना
\nXcode में प्रोजेक्ट खोलें:
\nopen Package.swift\nस्कीम Run चुनें और Cmd+R दबाएं। कुछ सेकंड में सर्वर http://127.0.0.1:8080 पर चलने लगेगा। ब्राउज़र खोलें - आपको Vapor से एक स्वागत संदेश दिखना चाहिए।
चरण 2: डेटा मॉडल बनाना
\n\nहमारा API कार्यों का प्रबंधन करेगा। प्रत्येक कार्य में ID, शीर्षक और स्थिति (पूर्ण/अपूर्ण) होती है।
\n\nहम Todo मॉडल बनाएंगे। Vapor में, मॉडल सामान्य संरचनाएं हैं जो प्रोटोकॉल Content (JSON में सीरियलाइज़ेशन के लिए) और Codable का पालन करती हैं।
फ़ाइल Sources/App/Models/Todo.swift बनाएं:
\nimport Vapor\n\nstruct Todo: Content, Codable {\n var id: UUID?\n var title: String\n var isCompleted: Bool\n \n init(id: UUID? = nil, title: String, isCompleted: Bool = false) {\n self.id = id\n self.title = title\n self.isCompleted = isCompleted\n }\n}\n\nध्यान दें: id एक वैकल्पिक UUID है। हम इसे कार्य बनाते समय सर्वर पर उत्पन्न करेंगे।
चरण 3: स्टोरेज और कंट्रोलर बनाना
\n\nसरलता के लिए, हम कार्यों को मेमोरी में (एक ऐरे में) स्टोर करेंगे। वास्तविक प्रोजेक्ट में, आप डेटाबेस (Fluent ORM) का उपयोग करेंगे, लेकिन 30 मिनट के डेमो के लिए यह अत्यधिक है।
\n\nस्टोरेज (In-Memory Store)
\nफ़ाइल Sources/App/Controllers/TodoStore.swift बनाएं:
\nimport Vapor\n\nfinal class TodoStore {\n private var todos: [Todo] = []\n private let lock = NSLock()\n \n func getAll() -> [Todo] {\n lock.lock()\n defer { lock.unlock() }\n return todos\n }\n \n func get(id: UUID) -> Todo? {\n lock.lock()\n defer { lock.unlock() }\n return todos.first { $0.id == id }\n }\n \n func create(_ todo: inout Todo) -> Todo {\n lock.lock()\n defer { lock.unlock() }\n todo.id = UUID()\n todos.append(todo)\n return todo\n }\n \n func update(id: UUID, with updatedTodo: Todo) -> Todo? {\n lock.lock()\n defer { lock.unlock() }\n guard let index = todos.firstIndex(where: { $0.id == id }) else { return nil }\n var mutableTodo = updatedTodo\n mutableTodo.id = id\n todos[index] = mutableTodo\n return mutableTodo\n }\n \n func delete(id: UUID) ->