Apidog

Nền tảng phát triển API hợp tác tất cả trong một

Thiết kế API

Tài liệu API

Gỡ lỗi API

Giả lập API

Kiểm thử API tự động

gRPC-Web là gì? Tất cả những gì bạn cần biết.

Khám phá gRPC-Web, lợi ích của nó và cách bắt đầu với hướng dẫn toàn diện này. Tìm hiểu cách gRPC-Web cho phép giao tiếp hiệu quả giữa ứng dụng web và dịch vụ gRPC, cùng cách các công cụ như Apidog có thể tối ưu hóa quy trình phát triển API của bạn.

Minh Triết

Minh Triết

Updated on tháng 11 29, 2024

Chào bạn! Nếu bạn đã theo kịp những xu hướng mới nhất trong phát triển web, bạn có lẽ đã nghe tới thuật ngữ gRPC-Web. Có thể bạn là một nhà phát triển đang tự hỏi liệu đây có phải là một thứ bạn nên tích hợp vào các dự án của mình không. Hoặc có thể bạn chỉ đơn giản là tò mò về những ồn ào xung quanh nó. Dù bằng cách nào, bạn đã đến đúng nơi. Hãy cùng khám phá thế giới của gRPC-Web, và đến cuối bài viết này, bạn sẽ có một sự hiểu biết vững chắc về nó, lý do tại sao nó hữu ích, và cách bạn có thể bắt đầu sử dụng nó.

gRPC-Web là gì?

Trước hết: gRPC-Web thực sự là gì ? Gần như là, gRPC-Web là một thư viện khách hàng JavaScript cho phép các ứng dụng web giao tiếp với các dịch vụ gRPC. Nó mở rộng khả năng của gRPC (Google Remote Procedure Call), một khuôn khổ mã nguồn mở sử dụng HTTP/2 để vận chuyển tin nhắn. gRPC được thiết kế để làm cho việc xây dựng các API có thể mở rộng và hiệu quả trở nên dễ dàng hơn.

gRPC web

Tóm tắt nhanh về gRPC

Trước khi chúng ta đào sâu vào gRPC-Web, hãy làm một cái nhìn nhanh về gRPC chính nó. gRPC được phát triển bởi Google và được sử dụng rộng rãi cho giao tiếp giữa các vi dịch vụ. Nó tận dụng HTTP/2, Protocol Buffers (protobufs), và cung cấp các tính năng như xác thực, cân bằng tải, và nhiều hơn nữa. Với gRPC, bạn định nghĩa các phương thức dịch vụ và các loại tin nhắn của mình bằng cách sử dụng các protocol buffers, không tạo mã cho cả máy khách và máy chủ.

Tại sao lại gRPC-Web?

Vậy, tại sao chúng ta cần gRPC-Web khi mà chúng ta đã có gRPC? Câu trả lời nằm trong những hạn chế của trình duyệt. Trong khi gRPC rất tuyệt cho giao tiếp giữa các máy chủ, nó không hoạt động trực tiếp với trình duyệt vì chúng không hỗ trợ các HTTP/2 trailers mà gRPC phụ thuộc vào. Đây là lúc gRPC-Web xuất hiện. Nó hoạt động như một cây cầu, cho phép các dịch vụ gRPC được tiêu thụ bởi các ứng dụng web.

gRPC

Những lợi ích chính của gRPC-Web

Bây giờ chúng ta đã biết gRPC-Web là gì, hãy cùng khám phá lý do tại sao bạn có thể muốn sử dụng nó. Dưới đây là một số lợi ích chính:

1. Hiệu suất

Một trong những tính năng nổi bật của gRPC-Web là hiệu suất của nó. Nhờ vào việc sử dụng HTTP/2 và Protocol Buffers, gRPC-Web có thể xử lý một số lượng lớn yêu cầu một cách hiệu quả. Điều này làm cho nó trở nên lý tưởng cho các ứng dụng cần trao đổi dữ liệu theo thời gian thực hoặc cần quản lý nhiều kết nối đồng thời.

2. Dễ sử dụng

Với gRPC-Web, bạn có thể tận dụng cùng một định nghĩa protocol buffer cho cả các khách hàng web và các dịch vụ backend của bạn. Điều này có nghĩa là bạn có thể duy trì tính nhất quán trên toàn bộ ngăn xếp ứng dụng của mình và giảm lượng mã boilerplate bạn cần viết. Thêm vào đó, với các công cụ như Apidog, bạn có thể đơn giản hóa hơn nữa quy trình phát triển API của mình.

3. Tính mở rộng

Bởi vì gRPC-Web sử dụng HTTP/2, nó hưởng lợi từ các tính năng như đa kênh, cho phép nhiều yêu cầu được gửi qua một kết nối duy nhất. Điều này giúp giảm độ trễ liên quan đến việc tạo ra và quản lý nhiều kết nối, làm cho ứng dụng của bạn mở rộng hơn.

4. Tính tương tác

gRPC-Web cho phép giao tiếp liền mạch giữa các ứng dụng web của bạn và các dịch vụ gRPC. Điều này có nghĩa là bạn có thể xây dựng các ứng dụng web hiện đại có thể tương tác với kiến trúc vi dịch vụ gRPC hiện có của bạn mà không cần phải tạo thêm các API REST.

Bắt đầu với gRPC-Web

Được rồi, đủ lý thuyết rồi! Hãy cùng thực hành và xem cách bạn có thể bắt đầu sử dụng gRPC-Web trong các dự án của mình.

Yêu cầu trước

Trước khi bắt đầu, hãy đảm bảo bạn đã cài đặt các phần sau:

  • Node.js
  • npm hoặc yarn
  • Trình biên dịch Protocol Buffers (protoc)

Bước 1: Định nghĩa dịch vụ của bạn

Bước đầu tiên là định nghĩa dịch vụ gRPC của bạn bằng cách sử dụng protocol buffers. Tạo một tệp .proto với định nghĩa dịch vụ và tin nhắn của bạn. Ví dụ:

syntax = "proto3";

package example;

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

message HelloRequest {
  string name = 1;
}

message HelloResponse {
  string message = 1;
}

Bước 2: Tạo mã máy khách và máy chủ

Tiếp theo, sử dụng trình biên dịch Protocol Buffers để tạo mã máy khách và máy chủ. Chạy lệnh sau:

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

Lệnh này tạo ra các tệp JavaScript cần thiết cho máy khách gRPC-Web của bạn.

Bước 3: Thiết lập máy chủ của bạn

Bây giờ, thiết lập một máy chủ gRPC để xử lý các yêu cầu. Đây là một ví dụ sử dụng 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: `Xin chào, ${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();
});

Bước 4: Thiết lập máy khách của bạn

Cuối cùng, thiết lập máy khách web của bạn để giao tiếp với máy chủ gRPC. Đây là một ví dụ sử dụng 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('Thế giới');

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

  return (
    <div>
      <button onClick={sayHello}>Nói Xin Chào</button>
      <p>{response}</p>
    </div>
  );
}

export default App;

Bước 5: Thiết lập một proxy

Bởi vì gRPC-Web sử dụng HTTP/2, bạn sẽ cần thiết lập một proxy để chuyển đổi các yêu cầu. Bạn có thể sử dụng proxy grpc-web cho mục đích này. Đây là cách thực hiện:

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

Tạo một tệp envoy-config.yaml với nội dung sau:

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

Các công cụ để tăng cường phát triển gRPC-Web của bạn

Mặc dù việc thiết lập gRPC-Web khá đơn giản, nhưng có những công cụ có thể làm cho quy trình phát triển mượt mà hơn. Một trong những công cụ đó là Apidog. Apidog là một công cụ quản lý API giúp bạn thiết kế, kiểm tra và giám sát các API của bạn một cách dễ dàng. Nó hỗ trợ gRPC, làm cho nó trở thành một lựa chọn xuất sắc cho phát triển gRPC-Web. Với Apidog, bạn có thể:

  • Thiết kế API: Tạo và quản lý các định nghĩa dịch vụ gRPC của bạn bằng cách sử dụng giao diện người dùng trực quan.
  • Kiểm tra API: Dễ dàng kiểm tra dịch vụ gRPC của bạn với các công cụ kiểm tra mạnh mẽ.
  • Giám sát API: Theo dõi hiệu suất của API của bạn và đảm bảo mọi thứ hoạt động trôi chảy.
Apidog Official website

Sử dụng Apidog kết hợp với gRPC-Web có thể giảm thiểu quy trình phát triển của bạn và đảm bảo bạn đang xây dựng các API mạnh mẽ và đáng tin cậy.

Hướng dẫn từng bước để kiểm tra gRPC-Web với Apidog

Bước 1: Thiết lập Apidog

Tạo một Dự án Mới: Mở Apidog, tạo một dự án mới bằng cách nhấp vào nút "+ Dự án mới". Đặt tên và mô tả cho dự án của bạn để giúp tổ chức mọi thứ dễ dàng hơn.

Create gRPC project on Apidog

Bước 2: Định nghĩa Dịch vụ gRPC của bạn

Nhập tệp .proto của bạn: Bạn có thể nhập tệp .proto hiện có của bạn hoặc định nghĩa dịch vụ gRPC của bạn bằng tay. Để nhập, nhấp vào nút "Nhập" và chọn tệp .proto của bạn. Apidog sẽ tự động phân tích tệp và tạo ra các định nghĩa API cần thiết.

Import Your .proto File

Bước 3: Cấu hình Điểm cuối gRPC-Web của bạn

Thiết lập Điểm cuối: Sau khi nhập tệp .proto của bạn, cấu hình điểm cuối gRPC-Web của bạn bằng cách chỉ định URL của máy chủ gRPC-Web của bạn. Ví dụ, nếu máy chủ của bạn đang chạy trên http://localhost:8080, hãy nhập URL này trong cấu hình điểm cuối.

Configure Your gRPC-Web Endpoint

Apidog sẽ liệt kê tất cả các phương thức dịch vụ được định nghĩa trong tệp .proto của bạn. Bạn có thể chọn các phương thức bạn muốn kiểm tra và thêm chúng vào API của bạn.

Các trường hợp sử dụng thực tế cho gRPC-Web

Để giúp bạn có cái nhìn rõ hơn về nơi mà gRPC-Web tỏa sáng, dưới đây là một số trường hợp sử dụng thực tế:

1. Các ứng dụng thời gian thực

Các ứng dụng cần cập nhật dữ liệu theo thời gian thực, chẳng hạn như ứng dụng trò chuyện hoặc bảng điều khiển trực tiếp, có thể hưởng lợi rất nhiều từ gRPC-Web. Giao thức giao tiếp hiệu quả của nó đảm bảo độ trễ thấp và hiệu suất cao.

2. Các kiến trúc vi dịch vụ

Nếu bạn đang làm việc với một kiến trúc vi dịch vụ, gRPC-Web có thể giúp các ứng dụng web của bạn giao tiếp liền mạch với các dịch vụ backend. Điều này cho phép bạn duy trì một giao thức giao tiếp nhất quán trên toàn bộ ngăn xếp của bạn.

3. Các ứng dụng chú trọng dữ liệu

Các ứng dụng cần xử lý khối lượng lớn dữ liệu, như dịch vụ phát video hoặc nền tảng phân tích dữ liệu lớn, có thể tận dụng khả năng tuần tự hóa và vận chuyển dữ liệu hiệu quả của gRPC-Web.

4. Các nền tảng IoT

Các nền tảng IoT thường yêu cầu giao tiếp hiệu quả và có thể mở rộng giữa các thiết bị và máy chủ. gRPC-Web cung cấp một giải pháp vững chắc để quản lý những tương tác này.

Kết luận

Và đó là tất cả—một cái nhìn tổng quan toàn diện về gRPC-Web. Chúng ta đã đề cập đến nó là gì, tại sao nó hữu ích, và cách bạn có thể bắt đầu sử dụng nó trong các dự án của mình. Với những lợi ích về hiệu suất, dễ sử dụng và khả năng mở rộng, gRPC-Web là một công cụ mạnh mẽ cho phát triển web hiện đại. Dù bạn đang xây dựng các ứng dụng thời gian thực, kiến trúc vi dịch vụ, hay các nền tảng chú trọng dữ liệu, gRPC-Web có thể đáp ứng nhu cầu của bạn. Và với các công cụ như Apidog, bạn có thể đơn giản hóa quy trình phát triển API của mình và đảm bảo các dịch vụ của bạn hoạt động trơn tru.

Vậy, bạn còn chờ gì nữa? Hãy tìm hiểu về gRPC-Web và bắt đầu xây dựng thế hệ ứng dụng web tiếp theo!