في هذا البرنامج التعليمي، سنقوم بإنشاء واجهة إنترنت بسيطة بناءً على REST باستخدام Spring Boot و Gradle. Spring Boot يسهل إنشاء تطبيقات مستقلة مستوى الإنتاج تستند إلى Spring، وGradle هو أداة البناء القوية التي تبسط عملية البناء.
ما هو REST؟
REST، النقل التمثيلي للحالة، هو مجموعة من المبادئ المعمارية التي تضمن توافق واجهات البرمجيات الخاصة بك، والقابلية للتوسع، والقابلية للصيانة. تخيل بناء كتل Lego – يمكن للتطبيقات المختلفة أن تتفاعل بشكل سلس مع واجهة البرمجيات الخاصة بك طالما أنها تتبع القواعد التوجيهية لـ REST، تمامًا مثل أن ينضم الألغام معًا بغض النظر عن مجموعتهم.
ما هو Spring Boot؟
Spring Boot هو إطار عمل قوي يبسط عملية التطوير. فكر فيه كأدوات مجهزة مسبقًا معبأة بالمكونات والميزات، مما يوفر لك الوقت والجهد في إعداد بنية التطبيق الخاصة بك. يمكنك التركيز على تصميم المنطق الأساسي لواجهة البرمجيات الخاصة بك دون الإطالة على التعليمات البرمجية الشائعة.
هل أنت جاهز لإطلاق مطور واجهة برمجة التطبيقات الخاص بك؟ هذا الدليل سيمدك بالقوة لإنشاء أول تطبيق REST لـ Spring Boot باستخدام Gradle، أداة البناء الشهيرة. سواء كنت برمج Java من جيد أو بدأت فقط تتعلم، هذه الرحلة خطوة بخطوة ستمدك بالمعرفة الأساسية لبناء خدمات الويب الديناميكية والتفاعلية.
النقاط الرئيسية
- إنشاء واجهات برمجة التطبيقات RESTful باستخدام Spring Boot: Spring Boot هي إطار عمل شهير للغة البرمجة Java الذي يسهل عملية تطوير واجهات برمجة التطبيقات RESTful. يوفر مجموعة واسعة من الميزات من الصندوق، مثل التهيئة التلقائية وحقن العتاد، والتي يمكن أن توفر لك الوقت والجهد.
- فهم المفاهيم الأساسية لواجهات برمجة التطبيقات RESTful: REST تعني نقل الحالة التمثيلية. إنه مجموعة من المبادئ المعمارية التي تضمن أن واجهات برمجة التطبيقات الخاصة بك قابلة للتبادل والقابلة للتوسع والقابلة للصيانة. بعض المفاهيم الرئيسية لواجهات برمجة التطبيقات RESTful تشمل تمثيل الموارد وطرق HTTP ورموز الحالة.
- تنفيذ عمليات CRUD الأساسية: CRUD تعني إنشاء وقراءة وتحديث وحذف. هذه هي العمليات الأساسية التي ستحتاج لتنفيذها في نقاط النهاية الخاصة ب API للسماح للمستخدمين بالتفاعل مع بياناتك.
- اختبار API الخاص بك بشكل شامل: من المهم اختبار API الخاص بك بشكل شامل قبل نشره في الإنتاج. سيساعدك ذلك على التأكد من أنه يعمل كما هو متوقع وأنه لا توجد أخطاء.
- استكشاف الوظائف المتقدمة: عندما تصبح أكثر على دراية بـ Spring Boot وواجهات برمجة التطبيقات RESTful، يمكنك استكشاف وظائف أكثر تقدمًا، مثل إدارة البيانات والأمان والتوكيد.
من خلال الجمع بين قوة REST مع الأسلوب المباشر لـ Spring Boot، ستتمكن من إنشاء واجهات برمجة التطبيقات فعالة ومرئية للمستخدمين يمكن دمجها بسلاسة مع تطبيقات أخرى. فهل أنت جاهز لفتح إمكانات واجهات برمجة التطبيقات RESTful باستخدام Spring Boot و Gradle؟ هيا بنا نبدأ!
المتطلبات الأساسية
- تم تثبيت JDK 11 (مجموعة تطوير Java)
- تم تثبيت أحدث إصدار من Gradle
- فهم أساسي لمفاهيم Java و Spring
الخطوة 1: إعداد المشروع
لبدء المشروع، نحتاج إلى بدء الخطوات الثلاثة التالية.
- افتح النصب العادي أو موجه الأوامر
- أنشئ مجلدًا جديدًا لمشروعك
- انتقل إلى مجلد المشروع
- بدء بنية أساسية لمشروع Spring Boot
mkdir spring-boot-rest-gradle
cd spring-boot-rest-gradle
gradle init --type spring-boot
الخطوة 2: إنشاء مشروع Spring Boot
يرجى تعديل ملف build.gradle الحالي الموجود في الدليل بالمحتوى التالي.
plugins {
id 'org.springframework.boot' version '2.6.3'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.example'
version = '1.0-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
هذا يعدّ مشروع Spring Boot أساسيًا بالوابعات الضرورية.
الخطوة 3: إنشاء تحكم REST
أنشئ ملفًا جديدًا باسم HelloController.java في الدليل src/main/java/com/example بالمحتوى التالي:
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/api")
public class HelloController {
private final List<String> messages = new ArrayList<>();
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot!";
}
@GetMapping("/messages")
public List<String> getMessages() {
return messages;
}
@PostMapping("/messages")
public String addMessage(@RequestBody String message) {
messages.add(message);
return "Message added: " + message;
}
@PutMapping("/messages/{index}")
public String updateMessage(@PathVariable int index, @RequestBody String updatedMessage) {
if (index < messages.size()) {
messages.set(index, updatedMessage);
return "Message updated at index " + index + ": " + updatedMessage;
} else {
return "Invalid index";
}
}
@DeleteMapping("/messages/{index}")
public String deleteMessage(@PathVariable int index) {
if (index < messages.size()) {
String removedMessage = messages.remove(index);
return "Message removed at index " + index + ": " + removedMessage;
} else {
return "Invalid index";
}
}
}
هذا يعرّف تحكم REST بنقاط نهاية لعمليات GET و POST و PUT و DELETE على قائمة بسيطة من الرسائل.
الخطوة 4: تشغيل التطبيق
افتح النصب العادي أو موجه الأوامر وقم بتشغيل الأمر التالي:
./gradlew bootRun
زر http://localhost:8080/api/hello في متصفحك للتحقق من نقطة البداية. يمكنك استخدام أدوات مثل curl أو Postman أو أي عميل REST لاختبار النقاط الأخرى.
الخطوة 5: كتابة اختبارات الحالة
قم بإنشاء ملف جديد باسم HelloControllerTest.java في الدليل src/test/java/com/example بمحتوى التالي:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
@SpringBootTest
@AutoConfigureMockMvc
public class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@BeforeEach
public void setUp() {
// مسح الرسائل قبل كل اختبار
// هذا يضمن حالة صفائحة لكل اختبار
// بدلاً من ذلك، يمكنك استخدام قاعدة بيانات اختبار أو بيانات وهمية
// اعتماداً على متطلباتك
HelloController messagesController = new HelloController();
messagesController.getMessages().clear();
}
@Test
public void testSayHello() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/api/hello"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("Hello, Spring Boot!"));
}
@Test
public void testGetMessages() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/api/messages"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$", hasSize(0)));
}
@Test
public void testAddMessage() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.post("/api/messages")
.contentType(MediaType.APPLICATION_JSON)
.content("\"Test Message\""))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("Message added: Test Message"));
}
@Test
public void testUpdateMessage() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.post("/api/messages")
.contentType(MediaType.APPLICATION_JSON)
.content("\"Initial Message\""));
mockMvc.perform(MockMvcRequestBuilders.put("/api/messages/0")
.contentType(MediaType.APPLICATION_JSON)
.content("\"Updated Message\""))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("Message updated at index 0: Updated Message"));
}
@Test
public void testDeleteMessage() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.post("/api/messages")
.contentType(MediaType.APPLICATION_JSON)
.content("\"Message to Delete\""));
mockMvc.perform(MockMvcRequestBuilders.delete("/api/messages/0"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().string("Message removed at index 0: Message to Delete"));
}
}
تستخدم هذه الحالات الإختبارية ميزات اختبار Spring Boot لمحاكاة استعلامات HTTP والتحقق من سلوك وحدة التحكم في الخدمة الإنترنت التطبيقية.
الخطوة 6: تشغيل الاختبارات
افتح терمينال أو موجه الأوامر وقم بتشغيل الأمر التالي لتنفيذ الاختبارات:
./gradlew test
راجع نتائج الاختبار للتأكد من اجتياز جميع الاختبارات بنجاح.
الخاتمة
تهانينا! لقد نجحت في إنشاء خدمة إنترنت تطبيقية بسيطة باستخدام عمليات CRUD مع Spring Boot و Gradle. تضمن هذا البرنامج التعليمي تنفيذ نقاط النهاية لعمليات GET و POST و PUT و DELETE إلى جانب الحالات الاختبارية المقابلة.
ملاحظات إضافية:
- هذا مثال بسيط للغاية. يمكنك توسيعه عن طريق إنشاء نقاط نهاية أكثر، والتعامل مع طرق HTTP مختلفة (POST، PUT، DELETE)، وإضافة وظائف مثل إدارة البيانات.
- النظر في إضافة اختبارات الوحدة للتحكم في وحدة التحكم باستخدام إطارات مثل JUnit.
- يمكنك استخدام Spring Initializr (https://start.spring.io/) لإنشاء مشروع بسرعة بواسطة الوثائق الإضافية والتهيئات.
لمزيد من التعلم، تحقق من هذه الموارد:
- دليل البدء في Spring Boot: https://spring.io/guides/gs/spring-boot/
- برنامج تعليمي خدمات REST Spring: https://spring.io/guides/gs/rest-service/
- بناء خدمة Web RESTful باستخدام Spring Boot Actuator: https://spring.io/guides/gs/actuator-service/
تذكر، هذه مجرد بداية لرحلتك في Spring Boot! استمر في استكشاف وبناء تطبيقات مذهلة.
Source:
https://dzone.com/articles/build-your-first-spring-boot-rest-application-with