بناء REST API بـ Spring Boot

بناء REST API بـ Spring Boot

Spring Boot إطار عمل لـ Java يساعد على تشغيل مشروع الخادم بسرعة. معظم الإعدادات الافتراضية جاهزة: خادم Tomcat مدمج، والاتصال بقاعدة البيانات، وتحويل البيانات إلى JSON. تبني هذه المقالة واجهة REST API صغيرة في ثلاث طبقات: Controller وService وRepository.

ملاحظة اختبار: الحاسوب الذي كُتبت عليه هذه المقالة لا يحتوي على Maven أو Gradle، ولم يُختبر تنزيل مكتبات Spring هنا. الكود أدناه هو النمط القياسي. شغّله بنفسك وتحقق من النتيجة قبل استخدامه فعليًا.

ما الذي تحتاجه

الطبقات الثلاث

مخطط: يستقبل Controller طلبات HTTP ويمررها إلى Service، ويستخدم Service الـ Repository للوصول إلى قاعدة البيانات
مخطط: يستقبل Controller طلبات HTTP ويمررها إلى Service، ويستخدم Service الـ Repository للوصول إلى قاعدة البيانات

الخطوة 1: إنشاء المشروع

ادخل إلى https://start.spring.io واختر Maven وJava 17، وأضف الاعتماديات Spring Web وSpring Data JPA، ثم أنشئ المشروع وفك ضغطه.

الخطوة 2: صنف البيانات

package com.example.demo;

import jakarta.persistence.*;

@Entity
public class Note {
    @Id
    @GeneratedValue
    private Long id;
    private String title;

    public Note() {}
    public Note(String title) { this.title = title; }

    public Long getId() { return id; }
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
}

الخطوة 3: Repository

package com.example.demo;

import org.springframework.data.jpa.repository.JpaRepository;

public interface NoteRepository extends JpaRepository<Note, Long> {
}

يوفر Spring Data الدوال الأساسية مثل `findAll` و`save` و`deleteById` تلقائيًا عند وراثة `JpaRepository`.

الخطوة 4: Service

package com.example.demo;

import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class NoteService {
    private final NoteRepository repository;

    public NoteService(NoteRepository repository) {
        this.repository = repository;
    }

    public List<Note> all() {
        return repository.findAll();
    }

    public Note create(String title) {
        return repository.save(new Note(title));
    }
}

الخطوة 5: Controller

package com.example.demo;

import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/api/notes")
public class NoteController {
    private final NoteService service;

    public NoteController(NoteService service) {
        this.service = service;
    }

    @GetMapping
    public List<Note> list() {
        return service.all();
    }

    @PostMapping
    public Note create(@RequestBody Note body) {
        return service.create(body.getTitle());
    }
}

الخطوة 6: التشغيل والاختبار

./mvnw spring-boot:run

اختبر باستخدام curl:

curl -X POST http://localhost:8080/api/notes -H "Content-Type: application/json" -d "{\"title\":\"ซื้อกาแฟ\"}"
curl http://localhost:8080/api/notes

أخطاء شائعة

الخطوات التالية

أضف التحقق من المدخلات، وادمج معالجة الأخطاء في مكان واحد باستخدام `@ControllerAdvice`، واختبر Service باستخدام JUnit.

الخلاصة

يقسّم Spring Boot واجهة REST API إلى ثلاث طبقات: يستقبل Controller الطلبات، ويعالج Service المنطق، ويتواصل Repository مع قاعدة البيانات. يجعل هذا الفصل الكود أسهل في الاختبار والصيانة.