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

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

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

ابدأ الدورة

مقدمة: Swift — ليس فقط لتطبيقات الهواتف المحمولة

لطالما اعتاد العديد من المطورين على ربط Swift حصريًا بنظامي iOS و macOS. ومع ذلك، فقد تجاوزت هذه اللغة حدود نظام Apple البيئي منذ زمن طويل. مع ظهور أطر العمل من جانب الخادم مثل Vapor و Kitura، أصبحت Swift أداة متكاملة لتطوير الواجهات الخلفية. في هذه المقالة، سنكتب REST API كاملة باستخدام Swift وإطار العمل Vapor في 30 دقيقة. ستتعلم كيفية إعداد مشروع، وإنشاء نقاط النهاية، وربط قاعدة بيانات، ومعالجة الأخطاء. مستعد؟ هيا بنا!

الخطوة 1: تثبيت المشروع وإعداده

أولاً، تأكد من تثبيت Swift 5.5 أو إصدار أحدث. يمكنك التحقق من الإصدار باستخدام الأمر:

swift --version

بعد ذلك، قم بتثبيت Vapor Toolbox — وهي أداة مساعدة لإدارة المشاريع:

brew install vapor

الآن لنقم بإنشاء مشروع جديد:

vapor new MyAPI --template=api

سينشئ هذا الأمر هيكل مجلدات مع قالب API جاهز. انتقل إلى مجلد المشروع وقم بتشغيل أمر البناء:

cd MyAPI
vapor build

إذا نجحت عملية البناء، قم بتشغيل الخادم:

vapor run

افتراضيًا، سيكون الخادم متاحًا على http://127.0.0.1:8080. افتح متصفحك وانتقل إلى هذا العنوان — يجب أن ترى رسالة ترحيب.

هيكل مشروع Vapor

  • Sources/App — الدليل الرئيسي لكود التطبيق
  • Sources/App/Controllers — المتحكمات (Controllers) لمعالجة الطلبات
  • Sources/App/Models — نماذج البيانات
  • Sources/App/routes.swift — ملف تسجيل المسارات (Routes)
  • configure.swift — إعدادات التطبيق وقاعدة البيانات

الخطوة 2: إنشاء نموذج البيانات وقاعدة البيانات

في هذا المثال، سنقوم بإنشاء API بسيط لإدارة قائمة المهام (To-Do List). لنبدأ بنموذج البيانات. قم بإنشاء ملف Todo.swift في مجلد Sources/App/Models:

import Fluent
import 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
    }
}

الآن لنقم بإنشاء ترحيل (Migration) للجدول. في الملف Sources/App/Migrations/CreateTodo.swift:

import Fluent

struct CreateTodo: Migration {
    func prepare(on database: Database) -> EventLoopFuture<Void> {
        database.schema("todos")
            .id()
            .field("title", .string, .required)
            .field("is_completed", .bool, .required)
            .create()
    }
    
    func revert(on database: Database) -> EventLoopFuture<Void> {
        database.schema("todos").delete()
    }
}

لا تنس تسجيل الترحيل في ملف configure.swift:

app.migrations.add(CreateTodo())

للبساطة، سنستخدم SQLite (قاعدة بيانات مدمجة). أضف هذا السطر إلى configure.swift:

app.databases.use(.sqlite(.file("db.sqlite")), as: .sqlite)

الخطوة 3: إنشاء نقاط نهاية REST API

الآن الجزء الأكثر إثارة — تنفيذ عمليات CRUD. قم بإنشاء متحكم TodoController.swift في مجلد Sources/App/Controllers:

import Vapor

struct TodoController: RouteCollection {
    func boot(routes: RoutesBuilder) throws {
        let todos = routes.grouped("api", "todos")
        todos.get(use: index)
        todos.post(use: create)
        todos.group(":todoID") { todo in
            todo.get(use: show)                

المدونات

توصيات الكتب