+6

Triển khai API Gateway trong .NET Core với Ocelot - Tính năng cơ bản - Phần 1

I. Tạo project

Ở đây mình tạo ra 3 project, trong đó:

  • OcelotGateway: project API Gateway
  • WebAPI.Cart: project service Giỏ hàng
  • WebAPI.Product: project service Sản phẩm

II. Tạo api cho các service

Ở WebAPI.Cart, mình tạo các api cho cart

Config port cho WebAPI.Cart

Ở WebAPI.Product, mình tạo các api cho product

Config port cho WebAPI.Cart

III. Config API Gateway

1. Install package

Install package Ocelot trong project OcelotGateway image.png

2. Config

Tạo file ocelot.json và cấu hình như sau image.png

Thêm Ocelot vào project image.png

IV. Tính năng

1. Routing

Chức năng Ocelot sẽ nhận những request đầu vào và điều hướng đến service đích. Config các route bằng cách tạo các route dưới dạng array json tại file ocelot.json: image.png

Cấu trúc mỗi route: image.png

  • DownstreamPathTemplate, Downstreamscheme và DownstreamHostAndports xác định URL mà request sẽ được chuyển đến
  • UpstreamPathTemplate là URL mà Ocelot sẽ sử dụng để xác định DownstreamPathTemplate sẽ sử dụng cho một request. Ví dụ: theo config ở trên, khi client vào url /posts/{postId} sẽ được map đến service tại localhost:80/api/post/{postId}

Demo Ban nãy ta có tạo 2 web api service là:

Kết quả Run 3 project WebAPI.Cart (port 6001), WebAPI.Product (port 5001), OcelotGateway (port 7141) Khi truy cập https://localhost:7141/cart-gateway/Cart/First, request đã được map tới https://localhost:6001/cart-api/Cart/First image.png image.png

Tương tự với product-api, khi truy cập /product-gateway/Product/First, request đã được map tới: https://localhost:7001/product-api/Product/First Tìm hiểu thêm một số tính năng khác của Routing độ ưu tiên, query string, dynamic route,... tại https://ocelot.readthedocs.io/en/latest/features/routing.html

2. Aggregation

Ocelot cho phép map 2 hay nhiều request thành một request duy nhất Ví dụ ta có 1 tính năng trước đây cần gọi 2 api riêng biệt là: https://localhost:51881/laura: trả về {“Age”: 19} https://localhost:51882/tom: trả về {“Age”: 25}

Khi sử dụng Request Aggregation, ta có thể biến nó thành 1 request duy nhất. Khi đó response sẽ trả về {"Tom":{"Age": 19}, "Laura":{"Age": 25}} image.png

Phần 2 của bài viết

https://viblo.asia/p/trien-khai-api-gateway-trong-net-core-voi-ocelot-tinh-nang-co-ban-phan-2-Ljy5V2Xj5ra

Tài liệu tham khảo

[1] https://ocelot.readthedocs.io/en/latest/introduction/bigpicture.html

[2] https://www.c-sharpcorner.com/article/building-api-gateway-using-ocelot-in-asp-net-core/


All rights reserved

Bình luận

Đăng nhập để bình luận
Avatar
@longtth
thg 1 16, 2023 12:10 CH

cám ơn tác giả nhưng mình xin có 1 comment để bạn sau vào có thể tránh lãng phí thời gian Ocelot đã bị tác giả confirm là "dead" nên nếu các bạn định build API Gateway cho app thì nên cân nhắc YARP của Microsoft

https://github.com/ThreeMammals/Ocelot/issues/1539 image.png

Avatar
@quanghoang0403
thg 1 17, 2023 9:37 SA

cảm ơn bạn đã chia sẻ!

Avatar
@Leona
thg 3 1, 2023 9:06 SA

Bài viết đi copy ảnh xào loàn lên, port ảnh 1 đường nội dung một kiểu

Avatar
@quanghoang0403
thg 3 3, 2023 1:41 SA

Cảm ơn bạn đã để lại bình luận, nhưng không biết định nghĩa "xào loàn lên" là gì vậy ạ.

Trong bài viết của mình có 2 loại ảnh

  • 1 loại background màu đen: do chính mình config trên project của mình và cap, không có copy từ đâu hết => Phần này thì mình demo triển khai từng step
  • 1 loại background màu vàng, mình lấy trên docs của Ocelot => Phần này thì mình muốn định nghĩa và cho 1 example về tính năng nên mình reference + dịch trực tiếp từ docs

Nếu bài viết làm bạn thấy mất thời gian đọc và mang lại cảm giác tích cực thì mình chân thành xin lỗi bạn. Hy vọng bạn tìm được nguồn tài liệu dễ hiểu và truyền đạt kiến thức tốt hơn. Chúc bạn một ngày học tập và làm việc hiệu quả!

Avatar
@truonglq
thg 5 25, 2023 4:12 SA

Mình làm theo hướng dẫn mà bên gateway truy cập upstream vẫn 404 nhỉ ?

Avatar
@quanghoang0403
thg 5 29, 2023 2:25 SA

Mình có share project demo cho bạn rồi á. Bạn tham khảo và so sánh thử xem đang cấu hình khác nhau chỗ nào. Nếu vẫn bị có thể liên hệ mình qua facebook https://www.facebook.com/dqhoangg

Avatar
@truonglq
thg 5 25, 2023 4:15 SA

Bạn có code demo của cả 2 phần không ? Share mình với. Thanks

Avatar
@quanghoang0403
thg 5 29, 2023 2:24 SA
Avatar
@truonglq
thg 5 29, 2023 3:03 SA

@quanghoang0403 cảm ơn bạn

Avatar
@cuongvt123
thg 1 9, 2024 3:20 SA

cho mình hỏi với post request thì mình triển khai như thế nào nhỉ, mình đã thử sửa file json bên ocelot, nhưng khi truy cập thì k được, mong b hồi âm

Avatar
@quanghoang0403
thg 1 9, 2024 6:04 CH

"UpstreamHttpMethod": ["Post" ], Bạn sửa như này hay như nào nhỉ? Nếu cần bạn có thể liên hệ qua Zalo sđt 0946 290 739 để mình phản hồi nha, mình ít vào đây check

Avatar
+6
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí