Hosting Và Tiêu Thụ Web API
- 09-07-2024
- Toanngo92
- 0 Comments
Mục lục
Cài đặt và Hosting Web API trên Máy Ảo Windows với IIS
Để hosting một Web API trên IIS, bạn cần cài đặt IIS và triển khai ứng dụng Web API lên đó. Dưới đây là các bước cài đặt IIS trên một máy ảo Windows:
- Đăng nhập vào Microsoft Azure và chọn “All resources” từ bên phải. Trang All resources sẽ được tải, như hình ảnh trong hình ảnh bên dưới.
2. Chọn TestVM1-nsg, loại Network security group. Nó sẽ tải trang quản lý của nhóm.
3. Trong trang quản lý Network Security Group, từ bên trái, chọn Inbound security rules. Đây là nơi cấu hình các thiết lập bảo mật đến (Incoming request).
4. Nhấn vào nút + Add. Một trang thiết lập mới hiện ra, như hình ảnh trong hình ảnh bên dưới.
5. Nhập thông tin với Port ranges được đặt là 3389 và Name là rdp-access, sau đó nhấn Add. Bây giờ, Windows VM đã sẵn sàng cho việc đăng nhập.
6. Mở Windows VM và sao chép địa chỉ IP công khai để đăng nhập. Để đăng nhập vào Windows VM, bạn cần thông tin đăng nhập đã được cấp khi tạo VM.
7. Mở Remote Desktop và dán địa chỉ IP với cổng. Địa chỉ IP sẽ có dạng 40.114.1xxx.xxxx:3389. Lưu ý thêm số cổng 3389 vào cuối.
8. Nhấp vào Connect, như hình ảnh trong bên dưới. Điều này sẽ yêu cầu nhập ID người dùng và mật khẩu. Nhập đúng thông tin để đăng nhập vào Windows VM. Sau khi đăng nhập, bạn sẽ thấy VM được tải vào cửa sổ remote desktop.
9. Từ menu Start, chạy Server Manager để cài đặt IIS. Ứng dụng Server Manager sẽ hiển thị.
10. Chọn Add Roles and Features từ cửa sổ chính. Từ cửa sổ Add Roles and Features Wizard, nhấn Next, điều này sẽ tải bước thứ hai của wizard.
11. Chọn nút tùy chọn Role-based or Feature-based installation như trong hình bên dưới.
12. Nhấn Next, điều này sẽ tải cửa sổ Destination Server Selection. Theo mặc định, cùng tên máy chủ được chọn. Nhấn Next để tiến tới cửa sổ Server Role selection. Hình bên dưới cho thấy danh sách các vai trò và tính năng.
13. Cuộn xuống danh sách để tìm hộp kiểm Web Server (IIS), điều này sẽ hiển thị một cửa sổ xác nhận. Nhấn Add Feature và quay trở lại cửa sổ Main Wizard. Sau đó, nhấn Next để tải cửa sổ feature.
14. Mở rộng các tính năng của .NET Framework 4.8 và chọn hộp kiểm ASP.NET 4.8 như trong Hình bên dưới.
15. Nhấn Next. Cửa sổ tiếp theo sẽ hiển thị tổng kết những gì đã được chọn. Nhấn Next một lần nữa để tiếp tục.
16. Cài đặt tính năng Phát triển ứng dụng ASP.NET. Để cài đặt, cuộn xuống danh sách và chọn ASP.NET 4.8, điều này sẽ hiển thị một cửa sổ xác nhận như trong Hình tiếp theo.
17. Trong cửa sổ pop-up, nhấn vào Add Features; điều này sẽ chọn tất cả các tính năng phụ thuộc cần thiết để chạy ASP.NET trong IIS. Lựa chọn cuối cùng được hiển thị như trong Hình bên dưới.
18. Nhấn Next. Điều này sẽ tải cửa sổ xác nhận cài đặt tính năng cuối cùng. Chọn Install và tiến hành cài đặt các phụ thuộc cho ASP.NET 4.8 và sau đó cài đặt IIS.
Bây giờ, IIS đã được cài đặt thành công trên máy ảo Windows. Để kiểm tra xem IIS đã được cài đặt đúng cách hay chưa, sử dụng địa chỉ IP công khai của VM và duyệt vào bằng bất kỳ trình duyệt nào. Nó sẽ tải trang chào mừng của IIS.
Đưa Web API lên IIS
Sau khi cài đặt IIS trên VM, các nhà phát triển có thể xuất bản ứng dụng Web API hiện có và đưa nó lên IIS dựa trên VM. Các bước sau đây cần được thực hiện để xuất bản:
- Mở ứng dụng Student Services đã tạo trong phiên trước đó.
- Để hiển thị cửa sổ các cách khác nhau để xuất bản, nhấp chuột phải vào dự án StudentServices và chọn Publish từ menu hiển thị.
- Sau khi chọn Folder từ menu bên trái, nhấp Publish để đưa ứng dụng vào thư mục /bin/Release/Publish. Xem hình bên dưới.
4. Khám phá các tệp trong thư mục /bin/Release/Publish và tạo một tệp .zip. Tệp zip sẽ giúp dễ dàng sao chép nội dung vào VM Windows để sử dụng.
5. Sao chép tệp zip và dán vào thư mục wwwroot của máy chủ VM Windows. Đa số thời gian, thư mục wwwroot có thể được tìm thấy trong đường dẫn C:\inetpub\wwwroot. Bây giờ, xóa nội dung đã có và giải nén nội dung trong thư mục wwwroot. Đảm bảo rằng tất cả các tệp được giải nén trực tiếp vào thư mục wwwroot. Bây giờ, các nhà phát triển có thể sử dụng bất kỳ trình duyệt nào để điều hướng đến địa chỉ IP công khai của VM. Điều này sẽ mở trang giúp đỡ API. Nếu nhấp vào liên kết API trong menu trên cùng, trang giúp đỡ API sẽ được hiển thị.
6. Sử dụng ứng dụng Postman để kiểm tra API.
Chú ý: Có thể phát sinh vấn đề khi kết nối đến cơ sở dữ liệu từ ứng dụng Web API. Trong trường hợp có vấn đề như vậy, sao chép Connection String từ cài đặt Cơ sở dữ liệu SQL Azure và thay thế nó trong file web.config. Một ví dụ Connection String được cung cấp trong đoạn mã bên dưới:
Server=tcp
.database.windows.net,1433;Initial Catalog=StudentDb;Persist Security Info=False;User ID=billsmith;Password=Dracula99;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
Tự tổ chức WebAPI
Tự tổ chức Web API tách riêng việc lưu trữ Web API từ ứng dụng chính (hoặc khách hàng). Do đó, việc lưu trữ Web API thực tế xảy ra trên một ứng dụng console dựa trên máy chủ hoặc Dịch vụ Windows. Trong quá trình phát triển, dự án tự tổ chức là một chương trình console. Do đó, một tập tin Program.cs được tạo trong dự án và liên kết với nó. Tập tin Program.cs này chứa phương thức chính, đó là điểm nhập cho ứng dụng – cơ chế chính được sử dụng để tạo mã tự tổ chức Web API.
Đăng ký cấu hình ảo khi khởi chạy ứng dụng lưu trữ, có thể là một dịch vụ Windows hoặc ứng dụng, là một yêu cầu quan trọng.
Sử dụng Kestrel để lưu trữ WebAPI
Máy chủ Web mã nguồn mở đi kèm với các mẫu ASP.NET là Kestrel. Nó có thể được sử dụng để lưu trữ các ứng dụng ASP.NET trên tất cả các hệ điều hành. Kestrel có thể được sử dụng một mình hoặc với một máy chủ proxy nghịch đảo (ví dụ: Apache, Nginx, và IIS). Máy chủ proxy nghịch đảo nhận các yêu cầu HTTP từ Internet, xử lý chúng, và sau đó gửi chúng đến Kestrel.
Trong kịch bản proxy ngược, nhiều ứng dụng trên cùng một máy chủ chia sẻ cùng một địa chỉ IP và cổng. Kestrel không cho phép nhiều ứng dụng sử dụng cùng một địa chỉ IP và cổng. Nếu Kestrel được thiết lập để nghe trên một cổng, nó có thể xử lý tất cả lưu lượng truy cập đi qua cổng đó, bất kể tiêu đề máy chủ nói gì. Proxy ngược chia sẻ cổng cũng có thể gửi yêu cầu tới Kestrel trên một địa chỉ IP và cổng khác.
Azure Application Service Web Apps (hoặc chỉ Web Apps) là dịch vụ dùng để lưu trữ backend di động, REST APIs và các ứng dụng web. Nó có thể được tạo ra bằng bất kỳ ngôn ngữ lập trình nào như .NET Core, Python, Java, hoặc PHP. Trên nền tảng Windows, các ứng dụng thường hoạt động và mở rộng tốt.
Đưa Web API lên Dịch vụ Microsoft Azure Web App
Dịch vụ lưu trữ này rất đáng tin cậy và có thể tự mở rộng và sửa chữa lỗi của chính nó. Một nhóm tài nguyên được tạo khi ứng dụng ASP.NET Web đầu tiên sử dụng dịch vụ này hoạt động tốt. Nhóm này bao gồm một kế hoạch dịch vụ, một ứng dụng Web Azure và ứng dụng đã được sử dụng.
Các bước để xuất bản ứng dụng Web API lên dịch vụ Azure App như sau:
- Mở ứng dụng có tên StudentServices đã tạo. Nhấp chuột phải vào dự án StudentServices và chọn Publish từ menu xuất hiện. Điều này sẽ đưa bạn đến trang hồ sơ để Publish. Vì đã có một hồ sơ publish, nên phải tạo một hồ sơ mới để publish lên Web Apps. Các hồ sơ Publish có thể được nhìn thấy trong hình bên dưới.
2. Để tạo một hồ sơ, nhấp vào liên kết Add a publish profile.
3. Để tạo một Azure Web App, chọn Dịch vụ ứng dụng từ menu ngữ cảnh cho tùy chọn Publish. Đảm bảo chọn tùy chọn New.
5. Chọn Create. Điều này sẽ tạo ra hồ sơ Publish và tự động tạo Web App và Web API. Sau khi quá trình publish hoàn tất, ứng dụng Web API sẽ tự động mở trên trình duyệt mặc định. Địa chỉ là http://studentservicesazureapp.azurewebsites.net.
6. Bạn có thể kiểm tra API bằng ứng dụng Postman.
Lưu trữ Web API trên Dịch vụ Container
Các Container Windows có thể được sử dụng như một phương tiện để tự động hóa quy trình triển khai ứng dụng .NET. Chúng hỗ trợ việc triển khai các ứng dụng này dưới dạng các container độc lập và có thể chuyển đổi, có thể chạy trên bất kỳ nền tảng nào như Cloud, Linux và Windows.
Điểm nổi bật của container là chúng giữ nguyên môi trường giống nhau qua các lần triển khai khác nhau. Một nhà phát triển có thể gỡ lỗi một ứng dụng trên một hệ thống và triển khai nó trên một hệ thống khác mà không có bất kỳ thay đổi nào trong môi trường chạy. Dịch vụ container được thành lập trên nền tảng Docker, nền tảng mã nguồn mở chính hỗ trợ triển khai tự động.
Ứng dụng thường bao gồm một hoặc nhiều thành phần container hóa, còn được gọi là các microservice. Nếu có nhiều thành phần như vậy, việc tổ chức chúng sao cho ứng dụng hoạt động như mong đợi là rất quan trọng. Quá trình này được gọi là orchestration container, bao gồm việc kiểm soát vòng đời của các container, đặc biệt là trong môi trường lớn và động. Nó hỗ trợ tự động hóa triển khai, sẵn có, mở rộng và di chuyển các container. Điều này có thể thực hiện được bằng một trong những công cụ orchestration container nổi tiếng như Docker Swarm hoặc Kubernetes.
Sự quan trọng của một API hiện đại và việc sử dụng container Docker để lưu trữ và chạy API trên đám mây có thể được mô tả như sau:
Sự quan trọng của Containers
- Ứng dụng với các phụ thuộc: Triển khai ứng dụng Web cùng với các phụ thuộc của nó trong một container.
- Việc sử dụng các container tăng tốc độ triển khai. Điều này là do tất cả các phụ thuộc của một ứng dụng đều nằm trong container chính.
- Đôi khi, các phụ thuộc có thể được cài đặt trên một máy ảo (VM). Do đó, khi triển khai các ứng dụng trên VM đó, có thể xảy ra sự không phù hợp giữa container và phụ thuộc trên máy ảo. Sự không phù hợp này có thể gây ra vấn đề khi biểu diễn dữ liệu ứng dụng. Để giảm thiểu rủi ro này, các phụ thuộc có thể được giữ cùng với container.
- Một phiên bản cụ thể của IIS và framework ASP.NET thường được đóng gói. Khi triển khai như một container, nhà phát triển có thể tự tin rằng ứng dụng Web sẽ hoạt động như mong đợi, vì cùng một phiên bản của IIS và ASP.NET sẽ được sử dụng cho việc phát triển và gỡ lỗi.
Tiêu thụ Web API
Một Web API có thể được tiêu thụ bằng HttpClient hoặc bằng Postman.
HttpClient:
Các yêu cầu và phản hồi HTTP từ URL được gửi và nhận với sự trợ giúp của lớp cơ sở. Điều này là tính năng của lớp HttpClient. Đây là tính năng bất đồng bộ mà.NET Framework có thể xử lý. Các ứng dụng HTTP hiện đại như HttpClient được sử dụng bởi các ứng dụng.NET. Xem xét tình huống mà một dịch vụ ASP.NET Web API được thiết lập để trưng bày một tính năng cụ thể. Sử dụng một đoạn mã phía client (jQuery hoặc JavaScript) để gọi các hoạt động POST, PUT, GET và DELETE trong một ứng dụng Web. Sử dụng HttpClient để kết nối một ứng dụng desktop hoặc console với cùng một Web API.
Có nhiều cách để sử dụng ASP.NET Web API với lớp HttpClient.
Bảng bên dưới mô tả các bước, cách thực hiện và giải thích của chúng.
Phương thức | Mô tả chi tiết |
GetAsync | Gửi yêu cầu GET đến một URI đã chỉ định. |
PostAsync | Gửi yêu cầu POST đến một URI đã chỉ định. |
PutAsync | Gửi yêu cầu PUT đến một URI đã chỉ định. |
DeleteAsync | Gửi yêu cầu DELETE đến một URI đã chỉ định. |
Dưới đây là các bước để triển khai Web API trong ứng dụng MVC bằng lớp HttpClient:
Bước 1: Sử dụng Visual Studio 2022 để tạo một ứng dụng MVC Web, ví dụ như StudentApp. Thêm lớp StudentModel vào thư mục Models. Mã mô hình được cung cấp trong đoạn mã bên dưới:
public class StudentModel
{
public int SID { get; set; }
public string SName { get; set; }
public string SEmail { get; set; }
public DateTime JoiningDate { get; set; }
}
Bước 2: Đặt một lớp điều khiển gọi là StudentController trong thư mục Controller.
Bước 3: Bên trong StudentController, nhấp chuột phải vào phương thức Index()
và từ menu ngữ cảnh, chọn tùy chọn Add View. Lần này, view sẽ được tạo dưới dạng trang Razor. Thiết lập được hiển thị trong Hình bên dưới.
Đoạn mã bên dưới hiển thị mã tự động được tạo trong Index.cshtml.
@model IEnumerable<StudentApp.Models.StudentModel>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>@Html.ActionLink("Tạo mới", "Create")</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.StudentID)
</th>
<th>
@Html.DisplayNameFor(model => model.StudentName)
</th>
<th>
@Html.DisplayNameFor(model => model.StudentEmail)
</th>
<th>
@Html.DisplayNameFor(model => model.JoiningDate)
</th>
<th> </th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.StudentID)
</td>
<td>
@Html.DisplayFor(modelItem => item.StudentName)
</td>
<td>
@Html.DisplayFor(modelItem => item.StudentEmail)
</td>
<td>
@Html.DisplayFor(modelItem => item.JoiningDate)
</td>
<td>
@Html.ActionLink("Sửa", "Edit", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Chi tiết", "Details", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Xóa", "Delete", new { /* id=item.PrimaryKey */ })
</td>
</tr>
}
</table>
Để gọi ứng dụng Web API từ ứng dụng MVC, cần thêm một tham chiếu bổ sung có tên là WebApi.Client
. Sử dụng Quản lý Gói NuGet để thêm tham chiếu DLL mới này.
Làm theo các bước sau để thêm tham chiếu:
Bước 4: Sử dụng Quản lý Gói NuGet, cài đặt Microsoft.AspNet.WebApi.client
.
Bước 5: Đi đến tệp StudentController
và thêm mã vào phương thức Index()
, như được hiển thị trong đoạn mã bên dưới
public ActionResult Index()
{
HttpClient WebHttpClient = new HttpClient();
WebHttpClient.BaseAddress = new Uri("http://studentservicesazureapp.azurewebsites.net/api/");
WebHttpClient.DefaultRequestHeaders.Clear();
WebHttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
IEnumerable<Models.StudentModel> studentList;
HttpResponseMessage response = WebHttpClient.GetAsync("Student").Result;
studentList = response.Content.ReadAsAsync<IEnumerable<Models.StudentModel>>().Result;
return View(studentList);
}
Bước 6: Chạy ứng dụng bằng cách nhấn F5 và có thể thấy rằng trình duyệt đã được tải với dữ liệu từ cơ sở dữ liệu, thực tế được tải qua Web API, như được hiển thị trong Hình bên dưới.
Lưu ý: Trong đoạn mã trên, đường dẫn API được sử dụng là WebApp được lưu trữ http://studentservicesazureapp.azurewebsites.net/api/.
Postman
Sau khi các Web API được phát triển trong ứng dụng thực tế, chúng được thử nghiệm bằng các công cụ bên thứ ba. Postman là một trong những công cụ tuyệt vời nhất có sẵn để thử nghiệm API. Các nhà phát triển có thể truy cập vào https://www.getpostman.com/apps để tải xuống chương trình. Sau khi tải xuống và cài đặt ứng dụng Postman, hãy khởi chạy nó.
Các bước sau mô tả cách thử nghiệm Web API bằng Postman:
Bước 1: Dán URL Web API (http://localhost:59502/api/Student/GetAll) vào Tab URL của Postman. Hình bên dưới cho thấy cách thực hiện điều này.
Bước 2: Thử tạo một Sinh viên bằng phương thức POST. Để làm điều này, sao chép và dán phương thức POST vào URL của Postman. Trong phần thân yêu cầu, thay đổi yêu cầu HTTP thành POST. Để tạo Sinh viên, nội dung raw, là dữ liệu JSON, phải được truyền. Hình bên dưới hiển thị chi tiết.
Swagger
Swagger là một đặc tả được sử dụng để mô tả các API REST một cách không phụ thuộc vào ngôn ngữ cụ thể. Nó hỗ trợ tạo ra các trang trợ giúp và tài liệu cho các API, hiện được gọi là OpenAPI. Swagger cải thiện khả năng khám phá API, giúp sinh mã SDK cho client và cung cấp tài liệu tương tác. Tài liệu mặc định của Swagger thường là tập tin swagger.json, miêu tả khả năng của API cụ thể và cách truy cập thông qua HTTP. Swagger UI, tích hợp trong các công cụ như Nswag và Swashbuckle, cung cấp giao diện dựa trên web để khám phá chi tiết của API.
Secure Hosted API
Các nhà phát triển khi phát triển ứng dụng cung cấp quyền truy cập vào tài nguyên hạn chế sử dụng Azure Active Directory (Azure AD) và mã thông báo truy cập bearer OAuth 2.0. Azure AD đăng ký các API và ứng dụng backend, cho phép ứng dụng client gọi các API này. Thiết lập OAuth 2.0 trong ứng dụng Web ASP.NET thông qua middleware OWIN cho phép bảo vệ dễ dàng các API. Việc xác thực các mã thông báo OAuth có thể được tự động hóa với chính sách validate-jwt cho tất cả các yêu cầu đến trong Azure AD Developer Console.
Bài tập
Bài tập: Quản lý danh sách sách và tác giả
Mô hình dữ liệu
Tạo file Book.cs với các thuộc tính sau:
- Id (int, primary key)
- Title (string, required, min length 5, max length 255)
- Genre (string, required, max length 100)
- PublishedDate (datetime)
- AuthorId (int, foreign key)
Tạo file Author.cs với các thuộc tính sau:
- Id (int, primary key)
- FirstName (string, required, max length 100)
- LastName (string, required, max length 100)
Tạo API với các endpoint sau:
- GET /api/books: Lấy danh sách sách.
- GET /api/books/{id}: Lấy thông tin chi tiết của sách theo ID.
- POST /api/books: Thêm sách mới.
- PUT /api/books/{id}: Cập nhật thông tin của sách theo ID.
- DELETE /api/books/{id}: Xóa sách theo ID.
- GET /api/authors: Lấy danh sách tác giả.
- GET /api/authors/{id}: Lấy thông tin chi tiết của tác giả theo ID.
- POST /api/authors: Thêm tác giả mới.
- PUT /api/authors/{id}: Cập nhật thông tin của tác giả theo ID.
- DELETE /api/authors/{id}: Xóa tác giả theo ID.
Tạo giao diện đơn giản bằng ReactJS để:
- Hiển thị danh sách sách.
- Lọc sách theo thể loại.
- Thêm sách mới.
- Phân trang, Sắp xếp và Tìm kiếm, Phân trang
- Cho phép sắp xếp danh sách sách theo tiêu đề, ngày xuất bản hoặc thể loại.
- Cho phép tìm kiếm sách theo tiêu đề.
Có thể viết thuần hoặc sử dụng bootstrap, antdesign