مقدمة: لماذا Swift لواجهات REST API؟
Swift ليس مجرد لغة لتطبيقات الهاتف المحمول. بفضل الأطر مثل Vapor و Kitura، يمكنك إنشاء واجهات REST API كاملة للجانب الخادم. هذا مفيد بشكل خاص إذا كان تطبيق iOS الخاص بك يستخدم Swift بالفعل: يمكنك كتابة كل من العميل والخادم بلغة واحدة، مما يقلل وقت التطوير ويبسط صيانة الكود.
في هذه المقالة، سنقوم بإنشاء REST API بسيط باستخدام Swift مع إطار العمل Vapor - الحل الأكثر شيوعًا لتطوير الخادم بلغة Swift. سنقوم بإعداد الخادم، وإضافة مسارات لعمليات CRUD، واختباره. العملية بأكملها ستستغرق 30 دقيقة كحد أقصى.
المتطلبات: macOS أو Linux، تثبيت Swift 5.8+ (أو أحدث)، فهم أساسي لـ HTTP و JSON.
الخطوة 1: تثبيت وإعداد مشروع Vapor
يوفر Vapor أداة CLI مريحة للبدء السريع. قم بتثبيتها عبر Homebrew:
brew install vapor
ثم قم بإنشاء مشروع جديد:
vapor new MyAPI --template=api
cd MyAPI
العلامة --template=api تنشئ هيكلًا أوليًا ببنية دنيا لـ REST API. بعد إنشاء المشروع، افتحه في Xcode (أو أي محرر):
open Package.swift
يتضمن هيكل المشروع:
Sources/App/— المنطق الرئيسي (المسارات، وحدات التحكم، النماذج).Sources/App/routes.swift— تسجيل المسارات.Sources/App/configure.swift— إعدادات التطبيق.Package.swift— التبعيات (Vapor مضمن بالفعل).
إذا كنت تستخدم Xcode، فسيقوم تلقائيًا بتحميل التبعيات. في الطرفية، نفذ vapor build للبناء.
الخطوة 2: إنشاء نموذج البيانات وقاعدة البيانات
لـ REST API نحتاج إلى نموذج. لننشئ نموذجًا بسيطًا Task (مهمة) مع الحقول: id, title, completed. في Vapor، ترث النماذج عادةً من Model (Fluent ORM).
أنشئ ملفًا Sources/App/Models/Task.swift:
import Fluent
import Vapor
final class Task: Model, Content {
static let schema = "tasks"
@ID(key: .id)
var id: UUID?
@Field(key: "title")
var title: String
@Field(key: "completed")
var completed: Bool
init() {}
init(id: UUID? = nil, title: String, completed: Bool = false) {
self.id = id
self.title = title
self.completed = completed
}
}
الآن لننشئ ترحيلًا للجدول في قاعدة البيانات. أنشئ ملفًا Sources/App/Migrations/CreateTask.swift:
import Fluent
struct CreateTask: Migration {
func prepare(on database: Database) -> EventLoopFuture<Void> {
database.schema("tasks")
.id()
.field("title", .string, .required)
.field("completed", .bool, .required)
.create()
}
func revert(on database: Database) -> EventLoopFuture<Void> {
database.schema("tasks").delete()
}
}
أضف الترحيل إلى configure.swift:
app.migrations.add(CreateTask())
افتراضيًا، يستخدم Vapor SQLite (ملف في مجلد المشروع). إذا كنت تريد PostgreSQL أو MySQL - قم بتغيير الإعدادات في configure.swift، ولكن للبدء السريع، SQLite مناسب تمامًا.
الخطوة 3: تسجيل مسارات REST API
الآن لننشئ وحدة تحكم لمعالجة الطلبات. أنشئ ملفًا Sources/App/Controllers/TaskController.swift:
import Vapor
import Fluent
struct TaskController: RouteCollection {
func boot(routes: RoutesBuilder) throws {
let tasks = routes.grouped("tasks")
tasks.get(use: index) // GET /tasks
tasks.post(use: create) // POST /tasks
tasks.grou
```