Ví dụ api phần còn lại của python với microservice
Trong những năm gần đây, REST (Chuyển giao trạng thái đại diện) đã nổi lên như một thiết kế kiến trúc tiêu chuẩn cho các dịch vụ web và API web Show
Trong bài viết này, tôi sẽ chỉ cho bạn cách dễ dàng để tạo một dịch vụ web RESTful bằng Python và vi khung Flask REST là gì?Các đặc điểm của hệ thống REST được xác định bởi sáu quy tắc thiết kế
Dịch vụ web RESTful là gì?Kiến trúc REST ban đầu được thiết kế để phù hợp với giao thức HTTP mà web trên toàn thế giới sử dụng Trọng tâm của khái niệm về dịch vụ web RESTful là khái niệm về tài nguyên. Tài nguyên được đại diện bởi các URI. Các máy khách gửi yêu cầu tới các URI này bằng các phương thức được xác định bởi giao thức HTTP và có thể do đó trạng thái của tài nguyên bị ảnh hưởng thay đổi Các phương thức yêu cầu HTTP thường được thiết kế để tác động đến một tài nguyên nhất định theo các cách tiêu chuẩn HTTP MethodActionExamplesGETNhận thông tin về tài nguyênhttp. //thí dụ. com/api/orders(truy xuất danh sách đơn đặt hàng)GETLấy thông tin về tài nguyênhttp. //thí dụ. com/api/orders/123 (truy xuất đơn hàng #123)POSTTạo tài nguyên mớihttp. //thí dụ. com/api/orders (tạo đơn hàng mới, từ dữ liệu được cung cấp cùng với yêu cầu)PUTCập nhật tài nguyênhttp. //thí dụ. com/api/orders/123 (cập nhật đơn hàng #123, từ dữ liệu được cung cấp cùng với yêu cầu)DELETEDXóa tài nguyênhttp. //thí dụ. com/api/orders/123 (xóa đơn hàng #123) Thiết kế REST không yêu cầu định dạng cụ thể cho dữ liệu được cung cấp cùng với các yêu cầu. Nói chung, dữ liệu được cung cấp trong phần thân yêu cầu dưới dạng đốm màu JSON hoặc đôi khi dưới dạng đối số trong phần chuỗi truy vấn của URL Thiết kế một dịch vụ web đơn giảnNhiệm vụ thiết kế một dịch vụ web hoặc API tuân thủ các nguyên tắc REST sau đó trở thành một bài tập xác định các tài nguyên sẽ bị lộ và chúng sẽ bị ảnh hưởng như thế nào bởi các phương thức yêu cầu khác nhau Giả sử chúng ta muốn viết một ứng dụng To Do List và chúng ta muốn thiết kế một dịch vụ web cho nó. Điều đầu tiên cần làm là quyết định URL gốc để truy cập dịch vụ này là gì. Ví dụ: chúng tôi có thể hiển thị dịch vụ này dưới dạng
Ở đây tôi đã quyết định đưa tên của ứng dụng và phiên bản API vào URL. Bao gồm tên ứng dụng trong URL rất hữu ích để cung cấp một không gian tên tách dịch vụ này khỏi các dịch vụ khác có thể chạy trên cùng một hệ thống. Việc đưa phiên bản vào URL có thể giúp thực hiện các bản cập nhật trong tương lai, vì các chức năng mới và có khả năng không tương thích có thể được thêm vào trong một phiên bản mới mà không ảnh hưởng đến các ứng dụng dựa trên các chức năng cũ hơn Bước tiếp theo là chọn các tài nguyên sẽ được cung cấp bởi dịch vụ này. Đây là một ứng dụng cực kỳ đơn giản, chúng tôi chỉ có các nhiệm vụ, vì vậy tài nguyên duy nhất của chúng tôi sẽ là các nhiệm vụ trong danh sách việc cần làm của chúng tôi Tài nguyên nhiệm vụ của chúng tôi sẽ sử dụng các phương thức HTTP như sau Phương thức HTTPURIActionGEThttp. //[tên máy chủ]/todo/api/v1. 0/tasksTruy xuất danh sách nhiệm vụGEThttp. //[tên máy chủ]/todo/api/v1. 0/t task/[task_id]Truy xuất tác vụPOSThttp. //[tên máy chủ]/todo/api/v1. 0/tasksTạo một nhiệm vụ mớiPUThttp. //[tên máy chủ]/todo/api/v1. 0/t task/[task_id]Cập nhật tác vụ hiện cóDELETEhttp. //[tên máy chủ]/todo/api/v1. 0/t task/[task_id]Xóa tác vụChúng ta có thể định nghĩa một tác vụ có các trường sau
Và với điều này, về cơ bản chúng ta đã hoàn thành phần thiết kế của dịch vụ web của mình. Tất cả những gì còn lại là để thực hiện nó Giới thiệu ngắn gọn về Flask microframeworkNếu bạn đã đọc sê-ri Flask Mega-Tutorial của tôi, bạn sẽ biết rằng Flask là một khung web Python đơn giản nhưng rất mạnh mẽ Trước khi chúng tôi đi sâu vào chi tiết cụ thể của các dịch vụ web, hãy xem lại cách cấu trúc một ứng dụng web Flask thông thường Tôi sẽ cho rằng bạn biết những điều cơ bản khi làm việc với Python trong nền tảng của bạn. Các dòng lệnh ví dụ tôi sẽ hiển thị bên dưới dành cho hệ điều hành giống Unix. Tóm lại, điều đó có nghĩa là chúng sẽ hoạt động trên Linux, Mac OS X và cả trên Windows nếu bạn sử dụng Cygwin. Các lệnh hơi khác một chút nếu bạn sử dụng phiên bản Python gốc của Windows Hãy bắt đầu bằng cách cài đặt Flask trong môi trường ảo. Nếu bạn chưa cài đặt 0 trong hệ thống của mình, bạn có thể tải xuống từ https. //pypi. con trăn. org/pypi/virtualenv
Bây giờ chúng ta đã cài đặt Flask, hãy tạo một ứng dụng web đơn giản, chúng ta sẽ đặt ứng dụng này vào một tệp có tên là 1
Để chạy ứng dụng này, chúng ta phải thực thi 1
Và bây giờ bạn có thể khởi chạy trình duyệt web của mình và gõ 3 để xem ứng dụng nhỏ bé này đang hoạt độngĐơn giản, phải không? Triển khai các dịch vụ RESTful trong Python và FlaskXây dựng các dịch vụ web với Flask đơn giản một cách đáng ngạc nhiên, đơn giản hơn nhiều so với việc xây dựng các ứng dụng phía máy chủ hoàn chỉnh giống như ứng dụng tôi đã xây dựng trong Mega-Tutorial Có một số tiện ích mở rộng Flask giúp xây dựng các dịch vụ RESTful với Flask, nhưng nhiệm vụ này đơn giản đến mức theo tôi thì không cần sử dụng tiện ích mở rộng Các máy khách của dịch vụ web của chúng tôi sẽ yêu cầu dịch vụ thêm, xóa và sửa đổi các tác vụ, vì vậy rõ ràng chúng tôi cần có một cách để lưu trữ các tác vụ. Cách rõ ràng để làm điều đó là xây dựng một cơ sở dữ liệu nhỏ, nhưng vì cơ sở dữ liệu không phải là chủ đề của bài viết này nên chúng tôi sẽ thực hiện một cách tiếp cận đơn giản hơn nhiều. Để tìm hiểu về cách sử dụng hợp lý cơ sở dữ liệu với Flask một lần nữa, tôi khuyên bạn nên đọc Mega-Tutorial của tôi Thay cho cơ sở dữ liệu, chúng tôi sẽ lưu trữ danh sách nhiệm vụ của mình trong cấu trúc bộ nhớ. Điều này sẽ chỉ hoạt động khi máy chủ web chạy ứng dụng của chúng tôi là một quy trình đơn và luồng đơn. Điều này không sao đối với máy chủ web phát triển riêng của Flask. Không được phép sử dụng kỹ thuật này trên máy chủ web sản xuất vì phải sử dụng thiết lập cơ sở dữ liệu phù hợp Sử dụng ứng dụng Flask cơ bản, chúng tôi hiện đã sẵn sàng triển khai điểm vào đầu tiên của dịch vụ web của mình ________số 8Như bạn có thể thấy, không có nhiều thay đổi. Chúng tôi đã tạo một cơ sở dữ liệu bộ nhớ gồm các tác vụ, không gì khác hơn là một mảng từ điển đơn giản và đơn giản. Mỗi mục trong mảng có các trường mà chúng tôi đã xác định ở trên cho các tác vụ của mình Thay vì điểm vào 4, giờ đây chúng ta có hàm 5 được liên kết với URI 6 và chỉ dành cho phương thức HTTP 7Phản hồi của chức năng này không phải là văn bản, chúng tôi hiện đang trả lời bằng dữ liệu JSON, mà chức năng 8 của Flask tạo ra cho chúng tôi từ cấu trúc dữ liệu của chúng tôiSử dụng trình duyệt web để kiểm tra dịch vụ web không phải là ý tưởng tốt nhất vì trình duyệt web không thể dễ dàng tạo tất cả các loại yêu cầu HTTP. Thay vào đó, chúng tôi sẽ sử dụng curl. Nếu bạn chưa cài đặt 9, hãy tiếp tục và cài đặt nó ngay bây giờBắt đầu dịch vụ web giống như cách chúng tôi đã bắt đầu ứng dụng mẫu, bằng cách chạy 1. Sau đó mở một cửa sổ giao diện điều khiển mới và chạy lệnh sau
Chúng tôi vừa gọi một chức năng trong dịch vụ RESTful của mình Bây giờ, hãy viết phiên bản thứ hai của phương thức GET cho tài nguyên nhiệm vụ của chúng ta. Nếu bạn nhìn vào bảng ở trên, đây sẽ là bảng được sử dụng để trả về dữ liệu của một tác vụ 7Chức năng thứ hai này thú vị hơn một chút. Ở đây, chúng tôi lấy id của tác vụ trong URL và Flask dịch nó thành đối số 71 mà chúng tôi nhận được trong hàmVới đối số này, chúng tôi tìm kiếm mảng 72 của chúng tôi. Nếu id mà chúng tôi đã cung cấp không tồn tại trong cơ sở dữ liệu của chúng tôi thì chúng tôi sẽ trả về mã lỗi 404 quen thuộc, theo thông số kỹ thuật HTTP có nghĩa là "Không tìm thấy tài nguyên", đây chính xác là trường hợp của chúng tôiNếu chúng tôi tìm thấy nhiệm vụ thì chúng tôi chỉ cần đóng gói nó dưới dạng JSON với 8 và gửi nó dưới dạng phản hồi, giống như chúng tôi đã làm trước đây cho toàn bộ bộ sưu tậpĐây là giao diện của hàm này khi được gọi từ 9 2Khi chúng tôi yêu cầu id tài nguyên #2, chúng tôi nhận được nó, nhưng khi chúng tôi yêu cầu #3, chúng tôi nhận được lỗi 404. Điều kỳ lạ về lỗi này là nó quay lại với một thông báo HTML thay vì JSON, vì đó là cách Flask tạo phản hồi 404 theo mặc định. Vì đây là một dịch vụ web nên các ứng dụng khách sẽ yêu cầu chúng tôi luôn phản hồi bằng JSON, vì vậy chúng tôi cần cải thiện trình xử lý lỗi 404 của mình 3Và chúng tôi nhận được phản hồi lỗi thân thiện với API hơn nhiều 4Tiếp theo trong danh sách của chúng ta là phương thức 75, mà chúng ta sẽ sử dụng để chèn một mục mới vào cơ sở dữ liệu tác vụ của mình 0Thêm một nhiệm vụ mới cũng khá dễ dàng. 76 sẽ có dữ liệu yêu cầu, nhưng chỉ khi nó được đánh dấu là JSON. Nếu dữ liệu không có ở đó hoặc nếu có nhưng chúng tôi đang thiếu một mục 77 thì chúng tôi sẽ trả về mã lỗi 400, đây là mã của yêu cầu không hợp lệSau đó, chúng tôi tạo một từ điển tác vụ mới, sử dụng id của tác vụ cuối cùng cộng với một (một cách rẻ tiền để đảm bảo các id duy nhất trong cơ sở dữ liệu đơn giản của chúng tôi). Chúng tôi cho phép trường 78 bị thiếu và chúng tôi cho rằng trường 79 sẽ luôn bắt đầu được đặt thành 20Chúng tôi nối tác vụ mới vào mảng 72 của mình, sau đó trả lời ứng dụng khách bằng tác vụ đã thêm và gửi lại mã trạng thái 201, mà HTTP xác định là mã cho "Đã tạo"Để kiểm tra chức năng mới này, chúng ta có thể sử dụng lệnh 9 sau 1Ghi chú. nếu bạn đang dùng Windows và sử dụng phiên bản Cygwin của 9 từ 24 thì lệnh trên sẽ hoạt động tốt. Tuy nhiên, nếu bạn đang sử dụng phiên bản gốc của 9 từ dấu nhắc lệnh thông thường thì cần thực hiện một bước nhảy nhỏ để gửi dấu ngoặc kép bên trong phần thân của yêu cầu 2Về cơ bản trên Windows, bạn phải sử dụng dấu ngoặc kép để đặt phần thân của yêu cầu, sau đó bên trong nó, bạn thoát khỏi dấu ngoặc kép bằng cách viết ba trong số chúng theo thứ tự Tất nhiên sau khi yêu cầu này hoàn thành, chúng tôi có thể nhận được danh sách các tác vụ được cập nhật 3Hai chức năng còn lại của dịch vụ web của chúng tôi được hiển thị bên dưới 4Hàm 26 sẽ không có gì bất ngờ. Đối với chức năng 27, chúng tôi đang cố gắng ngăn chặn lỗi bằng cách kiểm tra toàn diện các đối số đầu vào. Chúng tôi cần đảm bảo rằng mọi thứ mà khách hàng cung cấp cho chúng tôi đều ở định dạng dự kiến trước khi chúng tôi kết hợp nó vào cơ sở dữ liệu của mìnhMột lệnh gọi hàm cập nhật nhiệm vụ #2 đang được thực hiện sẽ được thực hiện như sau 5Cải thiện giao diện dịch vụ webVấn đề với thiết kế hiện tại của API là các máy khách buộc phải xây dựng URI từ các mã định danh tác vụ được trả về. Bản thân điều này khá dễ dàng, nhưng nó gián tiếp buộc khách hàng biết cách các URI này cần được xây dựng và điều này sẽ ngăn chúng tôi thực hiện các thay đổi đối với URI trong tương lai Thay vì trả về id tác vụ, chúng ta có thể trả về URI đầy đủ điều khiển tác vụ để khách hàng có sẵn URI để sử dụng. Đối với điều này, chúng ta có thể viết một hàm trợ giúp nhỏ để tạo phiên bản "công khai" của tác vụ để gửi cho khách hàng 6Tất cả những gì chúng ta đang làm ở đây là lấy một nhiệm vụ từ cơ sở dữ liệu của chúng ta và tạo một nhiệm vụ mới có tất cả các trường ngoại trừ 28, trường này được thay thế bằng một trường khác có tên là 29, được tạo bằng 30 của FlaskKhi chúng tôi trả về danh sách các nhiệm vụ, chúng tôi sẽ chuyển chúng qua chức năng này trước khi gửi chúng cho khách hàng 7Vì vậy, bây giờ đây là những gì khách hàng nhận được khi truy xuất danh sách các tác vụ 8Chúng tôi áp dụng kỹ thuật này cho tất cả các chức năng khác và với điều này, chúng tôi đảm bảo rằng khách hàng luôn nhìn thấy URI thay vì id Bảo mật một dịch vụ web RESTfulBạn có thể tin rằng chúng tôi đã hoàn thành? . Dịch vụ của chúng tôi mở cửa cho bất kỳ ai và đó là một điều tồi tệ Chúng tôi có một dịch vụ web hoàn chỉnh có thể quản lý danh sách việc cần làm của chúng tôi, nhưng dịch vụ ở trạng thái hiện tại được mở cho bất kỳ khách hàng nào. Nếu một người lạ tìm ra cách API của chúng tôi hoạt động, họ có thể viết một ứng dụng khách mới có thể truy cập dịch vụ của chúng tôi và làm rối tung dữ liệu của chúng tôi Hầu hết các hướng dẫn ở cấp độ đầu vào đều bỏ qua bảo mật và dừng tại đây. Theo tôi đây là một vấn đề nghiêm trọng cần được giải quyết Cách dễ nhất để bảo mật dịch vụ web của chúng tôi là yêu cầu khách hàng cung cấp tên người dùng và mật khẩu. Trong một ứng dụng web thông thường, bạn sẽ có một biểu mẫu đăng nhập đăng thông tin đăng nhập và tại thời điểm đó, máy chủ sẽ tạo phiên để người dùng đã đăng nhập tiếp tục làm việc, với id phiên được lưu trữ trong cookie trong trình duyệt máy khách. Thật không may, làm điều đó ở đây sẽ vi phạm yêu cầu không trạng thái của REST, vì vậy thay vào đó chúng tôi phải yêu cầu khách hàng gửi thông tin xác thực của họ với mọi yêu cầu họ gửi cho chúng tôi Với REST, chúng tôi luôn cố gắng tuân thủ giao thức HTTP nhiều nhất có thể. Bây giờ chúng ta cần triển khai xác thực, chúng ta nên làm như vậy trong ngữ cảnh của HTTP, cung cấp hai hình thức xác thực được gọi là Cơ bản và Thông báo Có một tiện ích mở rộng Flask nhỏ có thể trợ giúp việc này, không ai khác ngoài bạn thực sự viết. Vì vậy, hãy tiếp tục và cài đặt Flask-HTTPAuth 9Giả sử chúng ta muốn dịch vụ web của mình chỉ có thể truy cập được bằng tên người dùng 31 và mật khẩu 32. Chúng tôi có thể thiết lập xác thực HTTP cơ bản như sau 0Hàm 33 là hàm gọi lại mà tiện ích mở rộng sẽ sử dụng để lấy mật khẩu cho một người dùng nhất định. Trong một hệ thống phức tạp hơn, chức năng này có thể kiểm tra cơ sở dữ liệu người dùng, nhưng trong trường hợp này, chúng tôi chỉ có một người dùng nên không cần điều đóCuộc gọi lại 34 sẽ được tiện ích mở rộng sử dụng khi cần gửi lại mã lỗi trái phép cho máy khách. Giống như chúng tôi đã làm với các mã lỗi khác, ở đây chúng tôi tùy chỉnh phản hồi để chứa JSON thay vì HTMLVới thiết lập hệ thống xác thực, tất cả những gì còn lại là chỉ ra chức năng nào cần được bảo vệ, bằng cách thêm trình trang trí 35. Ví dụ 1Nếu bây giờ chúng ta thử gọi hàm này với 9 thì đây là những gì chúng ta nhận được 2Để có thể gọi chức năng này, chúng tôi phải gửi thông tin đăng nhập của mình 3Tiện ích mở rộng xác thực cho phép chúng tôi tự do lựa chọn chức năng nào trong dịch vụ được mở và chức năng nào được bảo vệ Để đảm bảo thông tin đăng nhập được bảo mật, dịch vụ web phải được hiển thị trong máy chủ Bảo mật HTTP (i. e. https. //. ) vì điều này mã hóa tất cả thông tin liên lạc giữa máy khách và máy chủ, đồng thời ngăn không cho bên thứ ba nhìn thấy thông tin đăng nhập xác thực khi chuyển tiếp Thật không may, các trình duyệt web có thói quen khó chịu là hiển thị hộp thoại đăng nhập xấu khi yêu cầu quay lại với mã lỗi 401. Điều này xảy ra ngay cả đối với các yêu cầu nền, vì vậy nếu chúng tôi triển khai ứng dụng khách trình duyệt web với máy chủ web hiện tại của mình, chúng tôi sẽ cần vượt qua các vòng để ngăn trình duyệt hiển thị hộp thoại xác thực của chúng và để ứng dụng khách của chúng tôi xử lý đăng nhập Một thủ thuật đơn giản để đánh lạc hướng trình duyệt web là trả về mã lỗi không phải 401. Một mã lỗi thay thế được nhiều người ưa chuộng là 403, đó là lỗi "Bị cấm". Mặc dù đây là một lỗi đủ gần, nhưng nó vi phạm tiêu chuẩn HTTP, vì vậy đây không phải là điều đúng đắn nếu cần tuân thủ đầy đủ. Đặc biệt, đây sẽ là một ý tưởng tồi nếu ứng dụng khách không phải là trình duyệt web. Nhưng đối với trường hợp máy chủ và máy khách được phát triển cùng nhau, nó sẽ tiết kiệm được rất nhiều rắc rối. Thay đổi đơn giản mà chúng ta có thể thực hiện để thực hiện thủ thuật này là thay thế 401 bằng 403 4Tất nhiên, nếu chúng tôi làm điều này, chúng tôi cũng sẽ cần ứng dụng khách để tìm lỗi 403 cải tiến có thểCó một số cách mà dịch vụ web nhỏ mà chúng tôi đã xây dựng ngày nay có thể được cải thiện Đối với người mới bắt đầu, một dịch vụ web thực phải được hỗ trợ bởi cơ sở dữ liệu thực. Cấu trúc dữ liệu bộ nhớ mà chúng tôi đang sử dụng rất hạn chế về chức năng và không nên được sử dụng cho ứng dụng thực Một lĩnh vực khác có thể cải tiến là xử lý nhiều người dùng. Nếu hệ thống hỗ trợ nhiều người dùng, thông tin đăng nhập xác thực do khách hàng gửi có thể được sử dụng để lấy danh sách công việc cụ thể của người dùng. Trong một hệ thống như vậy, chúng tôi sẽ có tài nguyên thứ hai, đó sẽ là người dùng. Yêu cầu 75 trên tài nguyên người dùng sẽ đại diện cho người dùng mới đăng ký dịch vụ. Yêu cầu 7 sẽ trả lại thông tin người dùng cho khách hàng. Yêu cầu 39 sẽ cập nhật thông tin người dùng, có thể cập nhật địa chỉ email. Yêu cầu 40 sẽ xóa tài khoản người dùngYêu cầu 7 truy xuất danh sách nhiệm vụ có thể được mở rộng theo một số cách. Đầu tiên, yêu cầu này có thể nhận các đối số phân trang tùy chọn để khách hàng có thể yêu cầu một phần của danh sách. Một cách khác để làm cho chức năng này hữu ích hơn là cho phép lọc theo các tiêu chí nhất định. Ví dụ: khách hàng có thể chỉ muốn xem các tác vụ đã hoàn thành hoặc chỉ các tác vụ có tiêu đề bắt đầu bằng chữ A. Tất cả các phần tử này có thể được thêm vào URL dưới dạng đối sốSự kết luậnMã hoàn chỉnh cho dịch vụ web To Do List có ở đây. https. //ý chính. github. com/miguelgrinberg/5614326 Tôi hy vọng đây là phần giới thiệu đơn giản và thân thiện về API RESTful. Nếu có đủ hứng thú, tôi có thể viết phần thứ hai cho bài viết này, trong đó chúng ta có thể phát triển một ứng dụng khách web đơn giản sử dụng dịch vụ này cho một ứng dụng To Do List hoàn chỉnh. Hãy cho tôi biết những gì bạn nghĩ dưới đây trong các ý kiến CẬP NHẬT. Theo dõi hướng dẫn này hiện đang trực tuyến. Viết ứng dụng khách Javascript REST CẬP NHẬT #2. Tôi đã viết một bài tiếp theo khác. Thiết kế API RESTful bằng Flask-RESTful CẬP NHẬT #3*. Một bài viết tiếp theo có sẵn. Xác thực RESTful với Flask Miguel Xin chào và cảm ơn bạn đã ghé thăm blog của tôi. Nếu bạn thích bài viết này, vui lòng xem xét hỗ trợ công việc của tôi trên blog này trên Patreon Microservice có thể là API REST không?Một trong những loại API phổ biến nhất để xây dựng các ứng dụng vi dịch vụ được gọi là “RESTful API” hoặc “REST API. ” API REST là một tiêu chuẩn phổ biến đối với các nhà phát triển vì nó sử dụng các lệnh HTTP mà hầu hết các nhà phát triển đều quen thuộc và dễ dàng sử dụng.
Tôi có thể xây dựng API REST bằng Python không?" Flask cho phép các nhà phát triển Python tạo API RESTful nhẹ . "
API REST trong ví dụ về Python là gì?API REST cho phép người dùng truy cập dữ liệu dịch vụ web qua URL web công khai . API REST của Python là một API như vậy. Bạn có thể sử dụng URL này để nhận thông tin về một người dùng GitHub nhất định. Gửi yêu cầu HTTP tới một URL cụ thể và xử lý câu trả lời là cách bạn lấy dữ liệu từ API REST của Python.
API REST có giống với Microservice không?Cách dễ hiểu nhất về microservice là chúng chia nhỏ ứng dụng thành các phần nhỏ hơn hoạt động đồng thời. Vi dịch vụ là các khối ứng dụng của bạn và thực hiện các dịch vụ khác nhau, trong khi API REST hoạt động như chất kết dính hoặc cầu nối tích hợp các vi dịch vụ riêng biệt này . |