Apidog

منصة تطوير API تعاونية متكاملة

تصميم API

توثيق API

تصحيح أخطاء API

محاكاة API

اختبار API الآلي

كيفية بناء واختبار واجهة برمجة تطبيقات Spring Boot باستخدام Apidog

تعلم كيفية إنشاء واجهة برمجة تطبيقات RESTful بسيطة باستخدام Spring Boot واختبارها بأداة تسمى APIdog. Spring Boot هو إطار عمل يسهل تطوير الويب باستخدام Java. Apidog هي أداة تساعدك في اختبار وتصحيح واجهات برمجة التطبيقات الخاصة بك.

@apidog

@apidog

Updated on نوفمبر 6, 2024

هل رغبت يومًا في إنشاء تطبيق ويب أو خدمة صغيرة باستخدام Java، ولكن شعرت بالإرهاق بسبب التعقيد والتكوين المطلوبين؟ إذا كان الأمر كذلك، فأنت لست وحدك. يواجه العديد من المطورين تحديات تطوير الويب، مثل إعداد الخادم، وإدارة التبعيات، والتعامل مع قاعدة البيانات، وأكثر من ذلك.

لهذا السبب، يعتبر Spring Boot محوريًا في هذا المجال. Spring Boot هو إطار عمل يبسط تطوير الويب باستخدام Java. يوفر ميزات مثل الإعداد التلقائي، والخوادم المدمجة، وتبعيات البداية، وأكثر من ذلك. مع Spring Boot، يمكنك التركيز على كتابة منطق عملك، بدلاً من التعامل مع الكود النمطي.

ولكن إنشاء تطبيق ويب أو خدمة صغيرة ليس كافيًا. تحتاج أيضًا إلى اختباره. يعتبر الاختبار أمرًا بالغ الأهمية لضمان جودة وموثوقية برنامجك. يساعدك في العثور على الأخطاء وإصلاحها، وتحسين الأداء، ومنع الأخطاء.

هنا يأتي دور Apidog.

💡
Apidog هي أداة تساعدك في اختبار وتصحيح واجهات برمجة التطبيقات الخاصة بك. تتيح لك الاتصال بواجهة برمجة التطبيقات الخاصة بك واستكشاف النقاط النهائية، وإنشاء وتشغيل حالات الاختبار، وتوليد التقارير. مع Apidog، يمكنك اختبار واجهة برمجة التطبيقات الخاصة بك بشكل أسرع وأسهل، دون كتابة أي كود.
button

في هذه التدوينة، ستتعلم كيفية بناء واختبار واجهة برمجة تطبيقات Spring Boot باستخدام Apidog. ستقوم بإنشاء واجهة برمجة تطبيقات RESTful بسيطة باستخدام Spring Boot واختبارها باستخدام Apidog.

ما هو Spring Boot ولماذا تستخدمه؟

Spring Boot هو إطار عمل يبسط تطوير تطبيقات Spring. يوفر الكثير من الميزات والاتفاقيات التي تجعل من الأسهل إنشاء وتكوين وتشغيل ونشر تطبيقات Spring. بعض فوائد استخدام Spring Boot هي:

  • يمتلك نظام إدارة تبعيات البداية الذي يضيف تلقائيًا المكتبات والإصدارات المطلوبة لمشروعك.
  • يمتلك خادم ويب مدمج يتيح لك تشغيل تطبيقك دون أي إعدادات أو تثبيت إضافي.
  • يمتلك آلية إعداد تلقائي تكشف وتطبق الإعدادات المثلى لتطبيقك بناءً على التبعيات والبيئة.
  • يمتلك دعمًا جاهزًا للإنتاج يتضمن ميزات مثل فحوصات الصحة، والقياسات، والتسجيل، والأمان.

مع Spring Boot، يمكنك التركيز على كتابة منطق عملك ودع الإطار يتولى الباقي.

Spring boot officail website

ما هو Apidog وكيف يمكنه مساعدتك في اختبار واجهة برمجة التطبيقات الخاصة بك؟

Apidog هي أداة تساعدك في اختبار واجهات برمجة التطبيقات الخاصة بك بطريقة بسيطة وبديهية. تتيح لك الاتصال بواجهة برمجة التطبيقات الخاصة بك، واستكشاف النقاط النهائية، وإنشاء وتشغيل حالات الاختبار لواجهة برمجة التطبيقات الخاصة بك. بعض ميزات APIdog هي:

  • يمتلك واجهة مستخدم رسومية تجعل من السهل التفاعل مع واجهة برمجة التطبيقات الخاصة بك ورؤية النتائج.
  • يمتلك محرر كود يتيح لك كتابة وتحرير حالات الاختبار الخاصة بك باستخدام JavaScript وChai assertions.
  • يمتلك منفذ اختبار ينفذ حالات الاختبار الخاصة بك ويظهر الحالة، والإخراج، والأخطاء لكل اختبار.
  • يمتلك مولد تقارير ينشئ تقريرًا شاملاً وقابل للتخصيص حول نتائج اختباراتك.

مع Apidog، يمكنك اختبار واجهة برمجة التطبيقات الخاصة بك بطريقة سريعة وموثوقة وضمان جودتها ووظيفتها.

Apidog main interface

إعداد المشروع

الخطوة الأولى هي إنشاء مشروع Spring Boot باستخدام Spring Initializr. Spring Initializr هي أداة ويب تولد هيكل مشروع أساسي وتكوين لك بناءً على تفضيلاتك. لاستخدام Spring Initializr، اتبع هذه الخطوات:

اذهب إلى https://start.spring.io/ واملأ تفاصيل مشروعك. في هذا المثال، سأستخدم الإعدادات التالية:

  • المشروع: Maven Project
  • اللغة: Java
  • Spring Boot: 3.2.3
  • بيانات المشروع:
  • المجموعة: com.example
  • العنصر: apidog-demo
  • الاسم: apidog-demo
  • الوصف: مشروع تجريبي لـ Spring Boot
  • اسم الحزمة: com.example.apidog-demo
  • التعبئة: Jar
  • Java: 17
  • التبعيات: Spring Web، Spring Data JPA، قاعدة بيانات H2
Setup Spring boot project

انقر على زر توليد لتنزيل ملف zip الخاص بمشروعك.

فك ضغط ملف zip وافتح المشروع في IDE المفضل لديك.

إضافة التبعيات لـ Spring Web وSpring Data JPA

الخطوة التالية هي إضافة التبعيات لـ Spring Web وSpring Data JPA. Spring Web هو وحدة توفر الدعم الأساسي لبناء واجهات برمجة التطبيقات RESTful باستخدام Spring. Spring Data JPA هي وحدة تبسط الوصول والتعامل مع البيانات في قواعد البيانات العلائقية باستخدام JPA وHibernate.

لإضافة هذه التبعيات، يمكنك استخدام Spring Initializr كما هو مذكور أعلاه، أو يمكنك تحرير ملف pom.xml الخاص بمشروعك يدويًا وإضافة التبعيات التالية:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
  <groupId>com.h2database</groupId>
  <artifactId>h2</artifactId>
  <scope>runtime</scope>
</dependency>

تكوين خصائص التطبيق

الخطوة التالية هي تكوين خصائص التطبيق. يحتوي ملف application.properties على أزواج المفتاح-القيمة التي تحدد سلوك وإعدادات تطبيقك. في هذا المثال، سنستخدم الخصائص التالية:

# تمكين وحدة التحكم H2 للوصول إلى قاعدة البيانات
spring.h2.console.enabled=true
# تعيين مسار وحدة تحكم H2
spring.h2.console.path=/h2-console
# تعيين عنوان URL لقاعدة البيانات
spring.datasource.url=jdbc:h2:mem:testdb
# تعيين اسم مستخدم قاعدة البيانات
spring.datasource.username=sa
# تعيين كلمة مرور قاعدة البيانات
spring.datasource.password=
# تعيين لهجة قاعدة البيانات
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
# إظهار جمل SQL في وحدة التحكم
spring.jpa.show-sql=true
# إنشاء مخطط قاعدة البيانات من صفوف الكيانات
spring.jpa.hibernate.ddl-auto=update
# تمكين واجهة مستخدم Swagger لتوثيق واجهة برمجة التطبيقات
springdoc.swagger-ui.enabled=true
# تعيين مسار واجهة مستخدم Swagger
springdoc.swagger-ui.path=/swagger-ui.html

إنشاء واجهة برمجة التطبيقات

الخطوة التالية هي إنشاء واجهة برمجة التطبيقات. ستتكون واجهة برمجة التطبيقات من نموذج مجال، ومستودع، وcontroller لعنصر بسيط يسمى Book. سيكون للكتاب الخصائص التالية: id، title، author، و price.

إنشاء نموذج المجال ومستودع لعنصر بسيط

نموذج المجال هو فئة تمثل البيانات والسلوك للعنصر. المستودع هو واجهة تمتد إلى واجهة JpaRepository وتوفر الأساليب للوصول إلى البيانات والتعامل معها للعنصر.

لإنشاء نموذج المجال والمستودع لعنصر الكتاب، اتبع هذه الخطوات:

  • إنشاء حزمة جديدة تسمى com.example.apidogdemo.model وإنشاء فئة جديدة تسمى Book.java داخلها.
  • توسيم الفئة بـ @Entity لتحديدها ككيان JPA و@Table لتحديد اسم الجدول في قاعدة البيانات.
  • تعريف خصائص الفئة وتوسيمها بـ @Id، @GeneratedValue، @Column، و@NotNull لتحديد المفتاح الأساسي، واستراتيجية التوليد، واسم العمود، وقيود التحقق على التوالي.
  • توليد أساليب الوصول setter وgetter، والبناء، وطريقة toString للفئة.

يجب أن تبدو فئة Book.java على النحو التالي:

package com.example.apidogdemo.model;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;

@Entity
@Table(name = "books")
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "title")
    @NotNull
    private String title;

    @Column(name = "author")
    @NotNull
    private String author;

    @Column(name = "price")
    @NotNull
    private BigDecimal price;

    public Book() {
    }

    public Book(Long id, String title, String author, BigDecimal price) {
        this.id = id;
        this.title = title;
        this.author = author;
        this.price = price;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                '}';
    }
}
  • إنشاء حزمة جديدة تسمى com.example.apidogdemo.repository وإنشاء واجهة جديدة تسمى BookRepository.java داخلها.
  • توسيم الواجهة بـ @Repository لتحديدها كمستودع Spring Data JPA.
  • مد واجهة JpaRepository وحدد نوع الكيان ونوع المفتاح الأساسي كمعلمات عامة.
  • اختياريًا، يمكنك تعريف طرق مخصصة لاستعلام بيانات الكيان.

يجب أن تبدو واجهة BookRepository.java على النحو التالي:

package com.example.apidogdemo.repository;

import com.example.apidogdemo.model.Book;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
    // يمكنك تعريف طرق مخصصة هنا
}

إنشاء وحدة تحكم وتعريف النقاط النهائية لعمليات CRUD

وحدة التحكم هي فئة تعالج الطلبات والاستجابات الخاصة بواجهة برمجة التطبيقات. تحدد وحدة التحكم النقاط النهائية لعمليات CRUD (إنشاء، قراءة، تحديث، وحذف) للكيان.

لإنشاء وحدة التحكم وتعريف النقاط النهائية للكيان Book، اتبع هذه الخطوات:

  • إنشاء حزمة جديدة تسمى com.example.apidogdemo.controller وإنشاء فئة جديدة تسمى BookController.java داخلها.
  • توسيم الفئة بـ @RestController لتحديدها كـ Spring MVC controller التي تعيد استجابات بصيغة JSON.
  • توسيم الفئة بـ @RequestMapping لتحديد المسار الأساسي للنقاط النهائية.
  • حقن مثيل BookRepository باستخدام توسيع @Autowired.
  • تحديد النقاط النهائية لعمليات CRUD باستخدام التعليقات التوضيحية @GetMapping، @PostMapping، @PutMapping، و@DeleteMapping وتحديد المسار ومعلمات كل نقطة نهائية.
  • استخدام فئة ResponseEntity لتغليف بيانات الاستجابة ورمز الحالة لكل نقطة نهائية.
  • استخدام التعليق التوضيحي @Valid للتحقق من جسم الطلب لنقاط النهاية لإنشاء وتحديث.
  • استخدام التعليقات التوضيحية @ExceptionHandler و@ResponseStatus لمعالجة الاستثناءات وإرجاع رمز الحالة والرسالة المناسبة.

يجب أن تبدو فئة BookController.java على النحو التالي:

package com.example.apidogdemo.controller;

import com.example.apidogdemo.model.Book;
import com.example.apidogdemo.repository.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ResponseStatusException;

import javax.validation.Valid;
import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/api/books")
public class BookController {

    @Autowired
    private BookRepository bookRepository;

    // احصل على جميع الكتب
    @GetMapping
    public ResponseEntity<List<Book>> getAllBooks() {
        List<Book> books = bookRepository.findAll();
        return new ResponseEntity<>(books, HttpStatus.OK);
    }

    // احصل على كتاب بواسطة id
    @GetMapping("/{id}")
    public ResponseEntity<Book> getBookById(@PathVariable Long id) {
        Optional<Book> book = bookRepository.findById(id);
        if (book.isPresent()) {
            return new ResponseEntity<>(book.get(), HttpStatus.OK);
        } else {
            throw new ResponseStatusException(HttpStatus.NOT_FOUND, "الكتاب غير موجود");
        }
    }

    // إنشاء كتاب
    @PostMapping
    public ResponseEntity<Book> createBook(@Valid @RequestBody Book book) {
        Book savedBook = bookRepository.save(book);
        return new ResponseEntity<>(savedBook, HttpStatus.CREATED);
    }

    // تحديث كتاب بواسطة id
    @PutMapping("/{id}")
    public ResponseEntity<Book> updateBook(@PathVariable Long id, @Valid @RequestBody Book book) {
        Optional<Book> existingBook = bookRepository.findById(id);
        if (existingBook.isPresent()) {
            book.setId(id);
            Book updatedBook = bookRepository.save(book);
            return new ResponseEntity<>(updatedBook, HttpStatus.OK);
        } else {
            throw new ResponseStatusException(HttpStatus.NOT_FOUND, "الكتاب غير موجود");
        }
    }

    // حذف كتاب بواسطة id
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteBook(@PathVariable Long id) {
        Optional<Book> existingBook = bookRepository.findById(id);
        if (existingBook.isPresent()) {
            bookRepository.deleteById(id);
            return new ResponseEntity<>(HttpStatus.NO_CONTENT);
        } else {
            throw new ResponseStatusException(HttpStatus.NOT_FOUND, "الكتاب غير موجود");
        }
    }

    // معالجة استثناءات التحقق
    @ExceptionHandler(javax.validation.ConstraintViolationException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String handleValidationExceptions(javax.validation.ConstraintViolationException ex) {
        return ex.getMessage();
    }
}

اختبار واجهة برمجة تطبيقات Spring boot باستخدام APIdog

الخطوة النهائية هي اختبار واجهة برمجة التطبيقات باستخدام Apidog. Apidog هي أداة تساعدك في اختبار واجهات برمجة التطبيقات الخاصة بك بطريقة بسيطة وبديهية. تتيح لك الاتصال بواجهة برمجة التطبيقات الخاصة بك، واستكشاف النقاط النهائية، وإنشاء وتشغيل حالات الاختبار لواجهة برمجة التطبيقات الخاصة بك.

button

لاختبار واجهة برمجة التطبيقات باستخدام Apidog، اتبع هذه الخطوات:

  • قم بتشغيل Apidog وأنشئ مشروعًا جديدًا عن طريق النقر على زر مشروع جديد.
Create new project
  • أدخل اسم ووصف مشروعك وانقر على زر الإنشاء.
Enter details to create new project on Apidog
  • أدخل عنوان URL الأساسي لواجهة برمجة التطبيقات الخاصة بك وانقر على زر الاتصال.
Select new API
  • يمكنك رؤية قائمة النقاط النهائية لواجهة برمجة التطبيقات الخاصة بك على اللوحة اليسرى. يمكنك النقر على كل نقطة نهائية لرؤية التفاصيل والأمثلة على اللوحة اليمنى.
Api endpoints list on apidog
  • يمكنك إنشاء وتشغيل حالات الاختبار لواجهة برمجة التطبيقات الخاصة بك عن طريق النقر على علامة التبويب حالات الاختبار على اللوحة اليمنى. يمكنك استخدام محرر الكود لكتابة وتحرير حالات الاختبار باستخدام JavaScript وChai assertions.
Create a new test scenario on Apidog
Test cases scenarios on apidog

يمكنك استخدام منفذ الاختبار لتنفيذ حالات الاختبار الخاصة بك ورؤية الحالة والإخراج والأخطاء لكل اختبار. يمكنك استخدام مولد التقارير لإنشاء تقرير شامل وقابل للتخصيص حول نتائج اختبارك.

الخاتمة

في هذه التدوينة، تعلمت كيفية بناء واختبار واجهة برمجة تطبيقات Spring Boot باستخدام Apidog. لقد أنشأت واجهة برمجة تطبيقات RESTful بسيطة باستخدام Spring Boot واختبرتها باستخدام Apidog.

Spring Boot هو إطار عمل يبسط تطوير الويب باستخدام Java. يوفر ميزات مثل الإعداد التلقائي، والخوادم المدمجة، وتبعيات البداية، وأكثر من ذلك. مع Spring Boot، يمكنك التركيز على كتابة منطق عملك، بدلاً من التعامل مع الكود النمطي.

Apidog هي أداة تساعدك في اختبار وتصحيح واجهات برمجة التطبيقات الخاصة بك. تتيح لك الاتصال بواجهة برمجة التطبيقات الخاصة بك واستكشاف النقاط النهائية، وإنشاء وتشغيل حالات الاختبار، وتوليد التقارير. مع Apidog، يمكنك اختبار واجهة برمجة التطبيقات الخاصة بك بشكل أسرع وأسهل، دون كتابة أي كود.

button
[دليل] تحويل واجهات برمجة التطبيقات SOAP إلى واجهات برمجة التطبيقات RESTالدروس التعليمية

[دليل] تحويل واجهات برمجة التطبيقات SOAP إلى واجهات برمجة التطبيقات REST

تحويل واجهات برمجة التطبيقات SOAP إلى REST أصبح أكثر وضوحًا. تقدم واجهات REST مرونة وقابلية للتوسع وبساطة في تعزيز الاتصال بين نظامين أو برنامجين. في هذه المقالة، اكتشف ما تحتاجه لتحويل واجهات SOAP إلى REST!

@apidog

فبراير 29, 2024

قم بتنزيل وتثبيت إنسومنيا على ويندوز/ماكOSالدروس التعليمية

قم بتنزيل وتثبيت إنسومنيا على ويندوز/ماكOS

إن الأرق هو أداة شائعة لإدارة واجهات برمجة التطبيقات بين المطورين. هنا سوف نوضح الخطوات اللازمة لتنزيلها وتثبيتها على نظام التشغيل الخاص بك، مثل ويندوز/لينكس/ماك أو إس، مجانًا.

@apidog

فبراير 27, 2024

كيف يمكن أن يعزز gRPC وHTTP/2 أداء واجهة برمجة التطبيقات الخاصة بكالدروس التعليمية

كيف يمكن أن يعزز gRPC وHTTP/2 أداء واجهة برمجة التطبيقات الخاصة بك

تعرف على gRPC وHTTP/2، وكيف يعملان معًا، ولماذا يمكنهما تقديم فوائد كبيرة لأداء واجهات برمجة التطبيقات الخاصة بك. أيضًا، اكتشف كيفية استخدام apidog لاختبار وتصحيح واجهات برمجة التطبيقات gRPC بسهولة.

@apidog

فبراير 27, 2024