كيفية كتابة REST API بلغة Swift في 30 دقيقة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا REST API على Swift سريعة وحديثة

تطوير تطبيقات الهاتف المحمول لنظامي iOS وmacOS لا يتطلب واجهة جميلة فحسب، بل يتطلب أيضًا خادمًا خلفيًا موثوقًا. تظل REST API (نقل الحالة التمثيلية) المعيار الفعلي لتبادل البيانات بين العميل والخادم. إذا كنت تكتب بالفعل بلغة Swift لنظام Apple البيئي، فإن إنشاء API بنفس اللغة هو خطوة منطقية. يتيح لك ذلك إعادة استخدام نماذج البيانات، وتجنب تكرار الكود، وتنفيذ التغييرات بشكل أسرع.

في هذه المقالة، سنوضح لك كيفية كتابة REST API كاملة في Swift باستخدام إطار عمل Vapor — إطار الويب الأكثر شيوعًا لـ Swift. ستتعلم كيفية إعداد مشروع، وإنشاء مسارات، والتعامل مع JSON، وتشغيل الخادم. العملية بأكملها لن تستغرق أكثر من 30 دقيقة. مستعد؟ هيا بنا!



1. إعداد البيئة وتثبيت Vapor

قبل كتابة الكود، تأكد من تثبيت الأدوات اللازمة. يتطلب العمل مع Vapor إصدار Swift 5.9 أو أحدث (يُوصى باستخدام Swift 6). ستحتاج أيضًا إلى طرفية ومحرر كود (Xcode أو VS Code).

تثبيت Vapor Toolbox

Vapor Toolbox هي أداة مساعدة لسطر الأوامر تبسط إنشاء وإدارة المشاريع. قم بتثبيتها عبر Homebrew:

brew install vapor

إذا لم يكن Homebrew مثبتًا، قم بتنزيله من brew.sh. بعد التثبيت، تحقق من الإصدار:

vapor --version

إنشاء مشروع جديد

افتح الطرفية وقم بتشغيل الأمر:

vapor new MyAPI --template=api

العلامة --template=api تنشئ هيكلًا أساسيًا لـ REST API بدون ملفات غير ضرورية. انتقل إلى مجلد المشروع:

cd MyAPI

الآن افتح المشروع في Xcode:

open Package.swift

أو استخدم أي محرر آخر. تم! لديك قالب Vapor نظيف.



2. الهيكل الأساسي: النماذج، المتحكمات، والمسارات

يستخدم Vapor بنية MVC (Model-View-Controller) المُكيَّفة للتطوير من جانب الخادم. سنقوم بإنشاء API بسيط لإدارة قائمة المهام.

إنشاء النموذج

النموذج هو هيكل يصف البيانات. في مجلد Sources/App/Models/، أنشئ ملفًا Todo.swift:

import Fluentimport Vapor

final class Todo: Model, Content { static let schema = "todos" @ID(key: .id) var id: UUID? @Field(key: "title") var title: String @Field(key: "is_completed") var isCompleted: Bool init() { } init(id: UUID? = nil, title: String, isCompleted: Bool = false) { self.id = id self.title = title self.isCompleted = isCompleted }}

نستخدم Fluent — ORM الخاص بـ Vapor للعمل مع قواعد البيانات. يتم تسلسل النموذج تلقائيًا إلى JSON بفضل بروتوكول Content.

إنشاء المتحكم

يحتوي المتحكم على منطق معالجة الطلب. أنشئ ملفًا Sources/App/Controllers/TodoController.swift:

import Vaporimport Fluent

struct TodoController: RouteCollection { func boot(routes: RoutesBuilder) throws { let todos = routes.grouped("todos") todos.get(use: index) todos.post(use: create) todos.group(":todoID") { todo in todo.delete(use: delete) } } // GET /todos — الحصول على جميع المهام func index(req: Request) async throws -> [Todo] { try await Todo.query(on: req.db).all() } // POST /todos — إنشاء مهمة func create(req: Request) async throws -> Todo { let todo = try req.content.decode(Todo.self) try await todo.save(on: req.db) return todo } // DELETE /todos/:id — حذف مهمة func delete(req: R

المدونات

توصيات الكتب