ما هو gRPC-Web؟ كل ما تحتاج إلى معرفته

اكتشف ما هو gRPC-Web وفوائده وكيفية البدء في استخدامه من خلال هذا الدليل الشامل. تعلم كيف يمكّن gRPC-Web من التواصل الفعال بين تطبيقات الويب وخدمات gRPC، وكيف يمكن لأدوات مثل Apidog تسريع عملية تطوير واجهات برمجة التطبيقات الخاصة بك.

Amir Hassan

Amir Hassan

13 أغسطس 2025

ما هو gRPC-Web؟ كل ما تحتاج إلى معرفته

Apidog للمؤسسات

النشر على الخوادم المحلية

SSO و RBAC

متوافق مع SOC 2

استكشف Apidog للمؤسسات

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

ما هو gRPC-Web؟

أولاً، ما هو بالضبط gRPC-Web؟ في جوهره، gRPC-Web هو مكتبة عميل JavaScript تمكن تطبيقات الويب من التواصل مع خدمات gRPC. إنها توسع وظيفة gRPC (استدعاء إجراء بعيد من جوجل)، وهو إطار عمل مفتوح المصدر يستخدم HTTP/2 لنقل الرسائل. تم تصميم gRPC لتسهيل بناء واجهات برمجة التطبيقات القابلة للتوسع والكفء.

gRPC web

نظرة سريعة على gRPC

قبل أن نغوص أعمق في gRPC-Web، دعنا نأخذ تذكير سريع عن gRPC نفسه. تم تطوير gRPC بواسطة جوجل ويستخدم على نطاق واسع في اتصالات الميكروservices. يستفيد من HTTP/2، وبروتوكول Buffers (protobufs)، ويوفر ميزات مثل المصادقة، والتوازن في التحميل، وأكثر. مع gRPC، تحدد طرق الخدمة وأنواع الرسائل باستخدام بروتوكول Buffers، الذي يولد بعد ذلك كودًا لكل من العميل والخادم.

لماذا gRPC-Web؟

إذًا، لماذا نحتاج إلى gRPC-Web عندما يكون لدينا gRPC بالفعل؟ الجواب يكمن في قيود المتصفحات. بينما gRPC ممتاز للتواصل بين الخوادم، فإنه لا يعمل مباشرة مع المتصفحات لأنها لا تدعم نوع HTTP/2 trailers، الذي يعتمد عليه gRPC. هنا يأتي دور gRPC-Web. يعمل كجسر، مما يمكّن خدمات gRPC من أن يتم استهلاكها بواسطة تطبيقات الويب.

gRPC

الفوائد الرئيسية لـ gRPC-Web

الآن بعد أن عرفنا ما هو gRPC-Web، دعونا نستكشف لماذا قد ترغب في استخدامه. إليك بعض الفوائد الرئيسية:

1. الأداء

واحدة من الميزات البارزة لـ gRPC-Web هي أداؤه. بفضل استخدامه لـ HTTP/2 وبروتوكول Buffers، يمكن لـ gRPC-Web التعامل مع عدد كبير من الطلبات بكفاءة. وهذا يجعله مثاليًا للتطبيقات التي تتطلب تبادل البيانات في الوقت الفعلي أو تحتاج إلى إدارة اتصالات متعددة في وقت واحد.

2. سهولة الاستخدام

مع gRPC-Web، يمكنك الاستفادة من نفس تعريفات بروتوكول Buffers لكل من عملائك في الويب وخدمات الخلفية. هذا يعني أنك يمكن أن تحافظ على الاتساق عبر مجموعة تطبيقاتك وتقليل كمية الكود المتكرر الذي تحتاج لكتابته. بالإضافة إلى ذلك، مع أدوات مثل Apidog، يمكنك تبسيط عملية تطوير واجهة برمجة التطبيقات لديك بشكل أكبر.

3. القابلية للتوسع

نظرًا لأن gRPC-Web يستخدم HTTP/2، فإنه يستفيد من ميزات مثل تعدد الإرسال، مما يسمح بإرسال طلبات متعددة عبر اتصال واحد. وهذا يساعد في تقليل الأعباء المرتبطة بإنشاء وإدارة اتصالات متعددة، مما يجعل تطبيقك أكثر قابلية للتوسع.

4. التوافقية

يتيح gRPC-Web اتصالًا سلسًا بين تطبيقات الويب وخدمات gRPC الخاصة بك. هذا يعني أنه يمكنك بناء تطبيقات ويب حديثة يمكنها التفاعل مع بنية الميكروservices القائمة على gRPC دون الحاجة إلى إنشاء واجهات برمجة تطبيقات REST إضافية.

البدء باستخدام gRPC-Web

حسنًا، يكفي من النظرية! دعنا نتعمق ونرى كيف يمكنك البدء في استخدام gRPC-Web في مشاريعك.

المتطلبات المسبقة

قبل أن تبدأ، تأكد من أنك قد قمت بتثبيت ما يلي:

الخطوة 1: تعريف خدمتك

الخطوة الأولى هي تعريف خدمة gRPC الخاصة بك باستخدام بروتوكول Buffers. أنشئ ملف .proto مع تعريفات الخدمة والرسالة الخاصة بك. على سبيل المثال:

syntax = "proto3";

package example;

service HelloService {
  rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
  string name = 1;
}

message HelloResponse {
  string message = 1;
}

الخطوة 2: توليد كود العميل والخادم

الخطوة التالية، استخدم مترجم بروتوكول Buffers لتوليد كود العميل والخادم. نفذ الأمر التالي:

protoc -I=. --js_out=import_style=commonjs,binary:. --grpc-web_out=import_style=commonjs,mode=grpcwebtext:. example.proto

هذا الأمر يولد ملفات JavaScript الضرورية لعميل gRPC-Web الخاص بك.

الخطوة 3: إعداد الخادم الخاص بك

الآن، قم بإعداد خادم gRPC لمعالجة الطلبات. إليك مثال باستخدام Node.js:

const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');

const packageDefinition = protoLoader.loadSync('example.proto', {});
const exampleProto = grpc.loadPackageDefinition(packageDefinition).example;

function sayHello(call, callback) {
  callback(null, { message: `مرحبًا، ${call.request.name}!` });
}

const server = new grpc.Server();
server.addService(exampleProto.HelloService.service, { sayHello: sayHello });
server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => {
  server.start();
});

الخطوة 4: إعداد العميل الخاص بك

أخيرًا، قم بإعداد عميل الويب الخاص بك للتواصل مع خادم gRPC. إليك مثال باستخدام React:

import React, { useState } from 'react';
import { HelloServiceClient } from './example_grpc_web_pb';
import { HelloRequest } from './example_pb';

const client = new HelloServiceClient('http://localhost:8080');

function App() {
  const [response, setResponse] = useState('');

  const sayHello = () => {
    const request = new HelloRequest();
    request.setName('العالم');

    client.sayHello(request, {}, (err, response) => {
      if (err) {
        console.error(err);
      } else {
        setResponse(response.getMessage());
      }
    });
  };

  return (
    <div>
      <button onClick={sayHello}>قل مرحبًا</button>
      <p>{response}</p>
    </div>
  );
}

export default App;

الخطوة 5: إعداد وكيل

نظرًا لأن gRPC-Web يستخدم HTTP/2، ستحتاج إلى إعداد وكيل لتحويل الطلبات. يمكنك استخدام وكيل grpc-web لهذا الغرض. إليك كيفية القيام بذلك:

docker run -d -p 8080:8080 --network host \
  --name grpc-web-proxy \
  envoyproxy/envoy:v1.18.3 -c /etc/envoy-config.yaml

أنشئ ملف envoy-config.yaml بالمحتوى التالي:

static_resources:
  listeners:
    - address:
        socket_address:
          address: 0.0.0.0
          port_value: 8080
      filter_chains:
        - filters:
            - name: envoy.filters.network.http_connection_manager
              typed_config:
                "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
                codec_type: AUTO
                stat_prefix: ingress_http
                route_config:
                  name: local_route
                  virtual_hosts:
                    - name: local_service
                      domains: ["*"]
                      routes:
                        - match:
                            prefix: "/"
                          route:
                            cluster: grpc_service
                http_filters:
                  - name: envoy.filters.http.grpc_web
                  - name: envoy.filters.http.router
  clusters:
    - name: grpc_service
      connect_timeout: 0.25s
      type: logical_dns
      lb_policy: round_robin
      http2_protocol_options: {}
      load_assignment:
        cluster_name: grpc_service
        endpoints:
          - lb_endpoints:
              - endpoint:
                  address:
                    socket_address:
                      address: 127.0.0.1
                      port_value: 50051

أدوات لتعزيز تطوير gRPC-Web الخاص بك

على الرغم من أن إعداد gRPC-Web بسيط إلى حد ما، إلا أن هناك أدوات يمكن أن تجعل عملية التطوير أكثر سلاسة. إحدى هذه الأدوات هي Apidog. Apidog هي أداة إدارة واجهات برمجة التطبيقات تساعدك على تصميم، واختبار، ومراقبة واجهات برمجة التطبيقات الخاصة بك بسهولة. إنها تدعم gRPC، مما يجعلها خيارًا ممتازًا لتطوير gRPC-Web. مع Apidog، يمكنك:

Apidog Official website

يمكن أن يؤدي استخدام Apidog بالتزامن مع gRPC-Web إلى تبسيط سير عمل تطويرك وضمان بناء واجهات برمجة التطبيقات الخاصة بك بشكل قوي وموثوق.

دليل خطوة بخطوة لاختبار gRPC-Web باستخدام Apidog

الخطوة 1: إعداد Apidog

إنشاء مشروع جديد: افتح Apidog، أنشئ مشروعًا جديدًا من خلال النقر على زر "+ مشروع جديد". أعط مشروعك اسمًا ووصفًا لمساعدتك في الحفاظ على تنظيم الأمور.

Create gRPC project on Apidog

الخطوة 2: تعريف خدمة gRPC الخاصة بك

استيراد ملف .proto الخاص بك: يمكنك إما استيراد ملف .proto الحالي الخاص بك أو تعريف خدمة gRPC الخاصة بك يدويًا. للاستيراد، انقر على زر "استيراد" واختر ملف .proto الخاص بك. ستحلل Apidog الملف تلقائيًا وتولد التعريفات API اللازمة.

Import Your .proto File

الخطوة 3: إعداد نقطة نهاية gRPC-Web الخاصة بك

إعداد نقطة النهاية: بعد استيراد ملف .proto الخاص بك، قم بتكوين نقطة نهاية gRPC-Web الخاصة بك عن طريق تحديد عنوان URL لخادم gRPC-Web الخاص بك. على سبيل المثال، إذا كان الخادم الخاص بك يعمل على http://localhost:8080، أدخل هذا العنوان URL في تكوين نقطة النهاية.

Configure Your gRPC-Web Endpoint

ستقوم Apidog بإدراج جميع طرق الخدمة المحددة في ملف .proto الخاص بك. يمكنك تحديد الطرق التي تريد اختبارها وإضافتها إلى واجهة برمجة التطبيقات الخاصة بك.

حالات استخدام gRPC-Web في العالم الحقيقي

لإعطائك فكرة أفضل عن أين يتألق gRPC-Web، إليك بعض حالات الاستخدام الواقعية:

1. التطبيقات في الوقت الحقيقي

يمكن للتطبيقات التي تتطلب تحديثات بيانات في الوقت الفعلي، مثل تطبيقات الدردشة أو لوحات القيادة المباشرة، أن تستفيد بشكل كبير من gRPC-Web. يضمن بروتوكول الاتصالات الفعال انخفاض زمن الانتقال العالي والأداء العالي.

2. بنى الميكروservices

إذا كنت تعمل مع بنية ميكروservices، يمكن أن تساعدك gRPC-Web على جعل تطبيقات الويب الخاصة بك تتواصل بسلاسة مع خدمات الخلفية. يتيح لك ذلك الحفاظ على بروتوكول اتصال متسق عبر مجموعة أدواتك بالكامل.

3. التطبيقات المعتمدة على البيانات

يمكن للتطبيقات التي تحتاج إلى التعامل مع كميات كبيرة من البيانات، مثل خدمات بث الفيديو أو منصات تحليل البيانات الضخمة، أن تستفيد من قدرات gRPC-Web الفعالة في تسلسل البيانات والنقل.

4. منصات إنترنت الأشياء

غالبًا ما تتطلب منصات إنترنت الأشياء اتصالات فعالة وقابلة للتوسع بين الأجهزة والخوادم. يوفر gRPC-Web حلاً قويًا لإدارة هذه التفاعلات.

الاستنتاج

وهناك لديك - نظرة شاملة على gRPC-Web. لقد تناولنا ما هو، ولماذا هو مفيد، وكيف يمكنك البدء باستخدامه في مشاريعك. مع فوائد الأداء، وسهولة الاستخدام، والقابلية للتوسع، gRPC-Web هو أداة قوية لتطوير الويب الحديث. سواء كنت تبني تطبيقات في الوقت الحقيقي، أو بنيات ميكروservices، أو منصات تعتمد على البيانات، gRPC-Web يمكنك من تحقيق أهدافك. ومع أدوات مثل Apidog، يمكنك تبسيط عملية تطوير واجهة برمجة التطبيقات الخاصة بك وضمان تشغيل خدماتك بسلاسة.

فماذا تنتظر؟ انطلق إلى gRPC-Web وابدأ في بناء الجيل القادم من تطبيقات الويب!

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات