تعلم كيفية التعامل مع واجهات برمجة التطبيقات (APIs) في جافا: إرسال واستقبال البيانات باستخدام HTTP

Amine
30/09/2024

ما هي واجهة برمجة التطبيقات (API)؟

واجهة برمجة التطبيقات (Application Programming Interface) هي مجموعة من البروتوكولات والأدوات التي تُستخدم لبناء التطبيقات والتفاعل مع البرمجيات الأخرى. تُستخدم APIs بشكل شائع لتبادل البيانات بين التطبيقات المختلفة، مثل الحصول على بيانات الطقس من موقع إلكتروني، أو إرسال طلبات لقاعدة بيانات خارجية.

لماذا نستخدم واجهات برمجة التطبيقات في جافا؟

استخدام واجهات برمجة التطبيقات في جافا يُسهّل عملية تبادل البيانات بين التطبيق والخادم (Server)، ويسمح بالتكامل مع الخدمات الأخرى مثل APIs الخاصة بالشبكات الاجتماعية، الخدمات المصرفية، أو قواعد البيانات. تُعتبر جافا من اللغات المثالية للعمل مع APIs نظرًا لدعمها الشامل لبروتوكولات HTTP وتوافر مكتبات قوية تسهل العمل معها.

كيفية إرسال واستقبال البيانات باستخدام HttpClient في جافا

Java 11 قدمت مكتبة جديدة باسم HttpClient تُستخدم لإرسال واستقبال البيانات باستخدام بروتوكول HTTP. باستخدام HttpClient، يمكنك بسهولة إنشاء طلبات GET و POST، ومعالجة الاستجابات.

إرسال طلب GET باستخدام HttpClient

لإرسال طلب GET، تحتاج إلى إنشاء كائن من الفئة HttpClient، ثم إنشاء طلب باستخدام HttpRequest، واسترجاع الاستجابة باستخدام HttpResponse. مثال:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
   public static void main(String[] args) {
      try {
         // إنشاء كائن HttpClient
         HttpClient client = HttpClient.newHttpClient();

         // إنشاء طلب GET
         HttpRequest request = HttpRequest.newBuilder()
                                          .uri(new URI("https://jsonplaceholder.typicode.com/posts/1"))
                                          .GET()
                                          .build();

         // إرسال الطلب واسترجاع الاستجابة
         HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

         // طباعة الاستجابة
         System.out.println("الاستجابة: " + response.body());
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

في هذا المثال، قمنا بإرسال طلب GET إلى API خاص بـ JSONPlaceholder واسترجعنا البيانات من هذا الطلب. استخدمنا الدالة send لإرسال الطلب واستلام الاستجابة، ثم طبعنا البيانات على الشاشة.

إرسال طلب POST باستخدام HttpClient

لإرسال طلب POST، تحتاج إلى تحديد البيانات التي ترغب في إرسالها في الطلب. يمكنك استخدام الدالة POST مع إضافة HttpRequest.BodyPublishers لتحديد جسم الطلب (Request Body). مثال:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
   public static void main(String[] args) {
      try {
         // إنشاء كائن HttpClient
         HttpClient client = HttpClient.newHttpClient();

         // إنشاء بيانات POST
         String postData = "{ \"title\": \"تعلم البرمجة\", \"body\": \"هذه هي رسالتي.\", \"userId\": 1 }";

         // إنشاء طلب POST
         HttpRequest request = HttpRequest.newBuilder()
                                          .uri(new URI("https://jsonplaceholder.typicode.com/posts"))
                                          .header("Content-Type", "application/json")
                                          .POST(HttpRequest.BodyPublishers.ofString(postData))
                                          .build();

         // إرسال الطلب واسترجاع الاستجابة
         HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

         // طباعة الاستجابة
         System.out.println("الاستجابة: " + response.body());
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

في هذا المثال، قمنا بإنشاء طلب POST يحتوي على بيانات JSON ثم أرسلناه إلى نفس API الخاص بـ JSONPlaceholder. طبعنا الاستجابة التي تحتوي على تفاصيل البيانات المرسلة.

استخدام مكتبة OkHttp لإرسال واستقبال البيانات في جافا

OkHttp هي مكتبة شهيرة تُستخدم لإرسال واستقبال البيانات باستخدام بروتوكول HTTP في جافا. تتميز OkHttp بمرونتها وسهولة استخدامها، وتعتبر خيارًا ممتازًا للتعامل مع واجهات برمجة التطبيقات (APIs).

إضافة مكتبة OkHttp إلى المشروع

إذا كنت تستخدم Gradle، أضف التالي إلى ملف build.gradle:

implementation 'com.squareup.okhttp3:okhttp:4.9.1'

إذا كنت تستخدم Maven، أضف التالي إلى ملف pom.xml:

<dependency>
   <groupId>com.squareup.okhttp3</groupId>
   <artifactId>okhttp</artifactId>
   <version>4.9.1</version>
</dependency>

إرسال طلب GET باستخدام OkHttp

لإرسال طلب GET باستخدام OkHttp، تحتاج إلى إنشاء كائن من الفئة OkHttpClient، ثم إنشاء طلب باستخدام الفئة Request. مثال:

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class Main {
   public static void main(String[] args) {
      OkHttpClient client = new OkHttpClient();

      // إنشاء طلب GET
      Request request = new Request.Builder()
            .url("https://jsonplaceholder.typicode.com/posts/1")
            .build();

      try (Response response = client.newCall(request).execute()) {
         if (response.isSuccessful()) {
            // طباعة الاستجابة
            System.out.println("الاستجابة: " + response.body().string());
         } else {
            System.out.println("فشل في الاتصال: " + response.code());
         }
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

في هذا المثال، استخدمنا مكتبة OkHttp لإرسال طلب GET واسترجاع البيانات من نفس API. استخدمنا الدالة newCall لإرسال الطلب، والدالة execute لاسترجاع الاستجابة.

إرسال طلب POST باستخدام OkHttp

لإرسال طلب POST، تحتاج إلى تحديد جسم الطلب (Request Body) باستخدام الفئة RequestBody. مثال:

import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class Main {
   public static void main(String[] args) {
      OkHttpClient client = new OkHttpClient();

      // إنشاء بيانات POST
      String postData = "{ \"title\": \"تعلم البرمجة\", \"body\": \"هذه هي رسالتي.\", \"userId\": 1 }";
      MediaType JSON = MediaType.parse("application/json; charset=utf-8");
      RequestBody body = RequestBody.create(postData, JSON);

      // إنشاء طلب POST
      Request request = new Request.Builder()
            .url("https://jsonplaceholder.typicode.com/posts")
            .post(body)
            .build();

      try (Response response = client.newCall(request).execute()) {
         if (response.isSuccessful()) {
            // طباعة الاستجابة
            System.out.println("الاستجابة: " + response.body().string());
         } else {
            System.out.println("فشل في الاتصال: " + response.code());
         }
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

في هذا المثال، استخدمنا RequestBody لتحديد البيانات التي سيتم إرسالها في طلب POST. قمنا بإرسال الطلب واسترجاع الاستجابة باستخدام نفس الطريقة السابقة.

مقارنة بين HttpClient و OkHttp

كلا المكتبتين تُستخدمان لإرسال واستقبال البيانات باستخدام HTTP، لكن هناك بعض الاختلافات بينهما:

  • HttpClient: مكتبة مدمجة في Java 11، توفر طريقة بسيطة وسهلة للتعامل مع HTTP، لكنها تفتقر إلى بعض المرونة الموجودة في OkHttp.
  • OkHttp: مكتبة متقدمة، توفر ميزات إضافية مثل التوصيلات المتعددة (Connection Pooling) والتحكم في الوقت المستغرق (Timeout Control). مناسبة للمشاريع الكبيرة والمعقدة.

تمرين (مستوى متوسط): إنشاء تطبيق تفاعلي باستخدام API في جافا

في هذا التمرين، سنقوم بإنشاء تطبيق جافا بسيط يقوم بإرسال طلب GET إلى API لاسترجاع بيانات المستخدم، ثم عرض البيانات على الشاشة. يمكنك استخدام HttpClient أو OkHttp.

المتطلبات:

  • إرسال طلب GET إلى API (مثل JSONPlaceholder) لاسترجاع بيانات المستخدم.
  • طباعة اسم المستخدم والبريد الإلكتروني والاسم الكامل.

الكود:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class UserFetcher {
   public static void main(String[] args) {
      try {
         // إنشاء كائن HttpClient
         HttpClient client = HttpClient.newHttpClient();

         // إنشاء طلب GET
         HttpRequest request = HttpRequest.newBuilder()
                                          .uri(new URI("https://jsonplaceholder.typicode.com/users/1"))
                                          .GET()
                                          .build();

         // إرسال الطلب واسترجاع الاستجابة
         HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

         // طباعة الاستجابة
         System.out.println("بيانات المستخدم: " + response.body());
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

شرح الكود:

  • قمنا بإرسال طلب GET إلى API الخاص بـ JSONPlaceholder لاسترجاع بيانات المستخدم.
  • استرجعنا البيانات وطبعناها على الشاشة.

جرّب تنفيذ هذا البرنامج بنفسك، وشارك نتيجتك معنا في التعليقات! إذا واجهتك أي مشكلة أو كان لديك سؤال، لا تتردد في طرحه.

خاتمة

في هذا الدرس، تعرفنا على كيفية إرسال واستقبال البيانات باستخدام واجهات برمجة التطبيقات (APIs) في جافا باستخدام HttpClient و OkHttp. تعلمنا كيفية إنشاء طلبات GET و POST، واسترجاع البيانات من APIs مختلفة. نوصي بممارسة التمرين المقدم لاكتساب المزيد من الخبرة في التعامل مع APIs. لا تنسَ ترك تعليق أو مشاركة هذا الدرس مع أصدقائك على وسائل التواصل الاجتماعي إذا وجدته مفيدًا!

التعليقات

اترك تعليقاً