Tạo Web API đầu tiên
Nội dung bài · 5 mục
- 1.Khái niệm
- 2.Ví dụ
- 3.Thử ngay
- 4.Lỗi hay gặp
- 5.Tóm tắt
Bạn đã biết HTTP, giờ tới lúc tự dựng một server trả lời request. Bài này tạo project Web API bằng ASP.NET Core, chạy nó, và gọi thử API có sẵn trong template.
Khái niệm
🏗️ Web API: chương trình chạy trên server, nhận HTTP request và trả về dữ liệu (thường là JSON) thay vì trang web.
🧩 WebApplication: object đại diện cho ứng dụng web, được tạo qua builder, cấu hình xong thì gọi Run() để bắt đầu nhận request.
Ví dụ
Tạo và chạy project:
dotnet new webapi --use-controllers -o ShopApi
cd ShopApi
dotnet run --urls http://localhost:5000--use-controllerstạo project dùng controller, cách làm của cả khoá này.--urlscố định địa chỉ server, để mọi bài gọi cùng một địa chỉ.
Phần cốt lõi của Program.cs:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.MapControllers();
app.Run();CreateBuildertạo builder để cấu hình ứng dụng.AddControllers()đăng ký các service mà controller cần.Build()tạo raapptừ cấu hình đó.MapControllers()nối URL tới các controller trong project.Run()bắt đầu nhận request, chạy cho tới khi bạn bấm Ctrl+C.
Template còn vài dòng khác trong Program.cs, như AddOpenApi() hay
UseHttpsRedirection(). Cứ giữ nguyên chúng, khoá này không cần sửa.
Thử ngay
Template có sẵn một controller mẫu tên WeatherForecast. Để nguyên server đang
chạy, mở terminal thứ hai và gọi:
curl -i http://localhost:5000/weatherforecastĐoán trước khi chạy: status code là bao nhiêu, và body có mấy phần tử?
Xem kết quả
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
[{"date":"...","temperatureC":12,"temperatureF":53,"summary":"Cool"},
... 5 phần tử]Status 200, body là một mảng JSON 5 phần tử. Số liệu là ngẫu nhiên nên mỗi
lần gọi mỗi khác. Tên property trong JSON có chữ đầu viết thường
(temperatureC), dù trong C# là TemperatureC.
Lỗi hay gặp
Quên MapControllers(). Server vẫn chạy, nhưng mọi URL đều trả 404 vì
không controller nào được nối vào.
// SAI — gọi URL nào cũng 404
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.Run();// ĐÚNG
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.MapControllers();
app.Run();Quên AddControllers(). Ứng dụng dừng ngay lúc khởi động, báo không tìm
thấy service cần thiết và nhắc bạn gọi AddControllers. Hai dòng
AddControllers và MapControllers luôn đi cùng nhau.
Tóm tắt
dotnet new webapi --use-controllerstạo project Web API dùng controller.dotnet run --urls http://localhost:5000chạy server ở địa chỉ cố định.Program.cs: tạo builder, đăng ký service,Build(), nối URL,Run().AddControllers()vàMapControllers()phải có đủ cả hai.
Tự kiểm tra
0/3 câuServer chạy bình thường nhưng gọi URL nào cũng nhận 404. Nguyên nhân nhiều khả năng nhất trong Program.cs là gì?
Controller trả về object C# có property ProductName. Trong JSON response, tên đó thường là gì?
Lệnh nào tạo project Web API dùng controller?