gRPC được xây dựng trên nền tảng của giao thức truyền tải nào? gRPC sử dụng giao thức HTTP/2 làm giao thức truyền tải cơ bản. Điều này cho phép gRPC tận dụng các tính năng của HTTP/2 như hỗ trợ nhiều luồng truyền tải, hỗ trợ các tính năng như server push, và hỗ trợ các tính năng khác. gRPC cũng có thể hoạt động trên các giao thức khác như TCP/IP trực tiếp, HTTP/1.1, UDP, nhưng giao thức HTTP/2 là giao thức được khuyến nghị và được sử dụng rộng rãi nhất.
Ngân hàng câu hỏi môn PRN232 - Xây dựng ứng dụng back-end đa nền tảng với .NET
PRN232 - Xây dựng ứng dụng back-end đa nền tảng với .NET là môn học xây dựng RESTful Web API bằng C# 12 và .NET 8 trên nền ASP.NET Core. Ngân hàng câu hỏi trắc nghiệm PRN232 có đáp án bao quát trọn bộ chương trình: nhập môn ASP.NET Core và RESTful Service (ràng buộc REST, tính phi trạng thái, giao thức HTTP, request line, mã trạng thái 200 OK, Kestrel, Swagger và OpenAPI, MapControllers, middleware trong Program.cs), Models trong Web API với Entity Framework Core (DbContext, DbSet, LINQ và ToListAsync, POCO, Repository Pattern, Data Transfer Object, AutoMapper, tránh trả thẳng entity ra client), Media Formatters và Content Negotiation (InputFormatter và OutputFormatter, TextInputFormatter, header Accept và Content-Type, hệ số ưu tiên q, application/json, application/xml, text/csv, serialization và deserialization), Binding - Validation - Routing (Model Binder, binding source parameter inference, FromBody, FromQuery, FromRoute, FromHeader, attribute routing, tham số route, Data Annotations với Required, StringLength, EmailAddress, RegularExpression, ApiController và ModelState.IsValid, trả về 400 Bad Request và NotFound), OData trong ASP.NET Core Web API (gói Microsoft.AspNetCore.OData, ODataConventionModelBuilder, Entity Data Model, Entity Set, các tuỳ chọn truy vấn $filter, $select, $expand, $orderby, $count, $skip, $top, endpoint $metadata, hàm endswith), bảo mật RESTful Web Service (ASP.NET Core Identity, JSON Web Token với ba phần Header - Payload - Signature, UseAuthentication và UseAuthorization, header Authorization dạng Bearer, thuộc tính Authorize theo Roles, HTTPS, xác thực và phân quyền), JavaScript Client và AJAX (jQuery, cú pháp $(selector).action(), $.ajax, $.get, $.post, phương thức .on() và event delegation, Same-Origin Policy, CORS, JSON hợp lệ, XML well-formed), xây dựng dịch vụ với WCF và CoreWCF (ServiceContract, OperationContract, endpoint ABC gồm Address - Binding - Contract, AddServiceModelServices, host trong ASP.NET Core dưới dạng middleware) và gRPC Service (Protocol Buffers, file .proto, HTTP/2, GrpcChannel, ServerCallContext, streaming hai chiều, Server Push), khép lại bằng kiến trúc Microservices (API Gateway, Ocelot, Docker, giao tiếp đồng bộ và bất đồng bộ, cơ sở dữ liệu riêng cho từng service, runtime coupling). Tài liệu ôn thi FE dành cho sinh viên FPT University.
Bắt đầu một phiên học theo môn
Tiến độ của bạn sẽ luôn được tính toán và đồng bộ trực tiếp theo tổng số lượng câu hỏi mới nhất của môn học này.
Bạn cần đăng nhập để bắt đầu học từ ngân hàng câu hỏi và lưu tiến độ theo môn.
Đang tải phân bố độ khó.
Để xóa một sản phẩm có ID là 123, chúng ta cần sử dụng phương thức HTTP phù hợp. Trong OData, phương thức HTTP để xóa một tài nguyên là DELETE. Khi sử dụng DELETE, chúng ta cần cung cấp đường dẫn đến tài nguyên cần xóa. Trong trường hợp này, đường dẫn đến sản phẩm có ID là 123 là /Products(123). Vì vậy, câu trả lời đúng là DELETE /Products(123).
Một đối tượng JSON hợp lệ phải tuân thủ các quy tắc sau: - Các khóa phải được bao quanh bởi dấu ngoặc kép (" "). - Các giá trị phải được bao quanh bởi dấu ngoặc kép (" ") nếu là chuỗi, hoặc không cần dấu ngoặc kép nếu là số hoặc giá trị boolean. - Không được bỏ dấu phẩy sau mỗi cặp khóa-giá trị. - Không được bỏ dấu ngoặc kép ở cuối đối tượng. Vì vậy, trong bốn lựa chọn trên, chỉ có "{ "name": "John Doe", "age": 30 }" đáp ứng được các quy tắc này.
Để gắn một tham số vào một yêu cầu tiêu đề, bạn cần sử dụng thuộc tính nào?
Khi sử dụng [ApiController] trong ASP.NET Core, model binder sẽ cố gắng lấy dữ liệu cho tham số kiểu phức tạp (như một lớp hoặc bản ghi) từ đâu? Theo mặc định, model binder sẽ lấy dữ liệu từ cơ thể yêu cầu (request body). Điều này có nghĩa là dữ liệu sẽ được gửi qua trong nội dung của yêu cầu HTTP, thường là dưới dạng JSON hoặc XML. Điều này giúp cho việc truyền dữ liệu phức tạp trở nên dễ dàng hơn và giúp cho việc xử lý dữ liệu trở nên linh hoạt hơn. Tuy nhiên, người dùng cũng có thể sử dụng các thuộc tính khác nhau để chỉ định nguồn dữ liệu cho model binder, chẳng hạn như [FromBody], [FromQuery] hoặc [FromRoute].
Loại định dạng Media Type cho JSON được sử dụng rộng rãi và được khuyến nghị là 'application/json'. Loại này được sử dụng để xác định rằng dữ liệu được gửi hoặc nhận là trong định dạng JSON. Ví dụ, khi gửi yêu cầu HTTP, bạn có thể sử dụng 'Content-Type: application/json' để chỉ định rằng dữ liệu được gửi là trong định dạng JSON. Ngoài ra, khi nhận dữ liệu, bạn có thể sử dụng 'Accept: application/json' để chỉ định rằng bạn muốn nhận dữ liệu trong định dạng JSON. Loại định dạng này được hỗ trợ bởi hầu hết các trình duyệt và ứng dụng web, vì vậy nó là lựa chọn tốt nhất cho việc gửi và nhận dữ liệu JSON.
Khi xây dựng một ứng dụng web, việc bảo vệ thông tin người dùng là rất quan trọng. Trong trường hợp này, chúng ta có một thực thể User trong EF Core với các thuộc tính Id, Username, HashedPassword và IsAdmin. Nếu một client yêu cầu thông tin chi tiết về một người dùng, chúng ta cần quyết định thông tin nào nên được trả về.
EF Core biết được các lớp nào cần bao gồm trong mô hình cơ sở dữ liệu dựa trên các thuộc tính DbSet<T> được định nghĩa trong lớp DbContext. Khi bạn tạo một thuộc tính DbSet<T>, EF Core sẽ tự động phát hiện lớp tương ứng và bao gồm nó trong mô hình cơ sở dữ liệu. Điều này giúp bạn dễ dàng quản lý các lớp và mối quan hệ giữa chúng trong ứng dụng .NET 9 sử dụng EF Core.
Để xác định một thuộc tính là một địa chỉ email hợp lệ, bạn cần sử dụng thuộc tính [EmailAddress]. Đây là thuộc tính được sử dụng để xác minh rằng giá trị nhập vào có đúng định dạng email. Ví dụ, khi bạn nhập vào địa chỉ email như '[email protected]', thuộc tính [EmailAddress] sẽ xác nhận rằng nó có đúng định dạng và không có lỗi. Ngoài ra, bạn cũng có thể sử dụng thuộc tính [IsEmail] để thực hiện chức năng tương tự, nhưng [EmailAddress] là lựa chọn phổ biến hơn và được sử dụng rộng rãi trong các ứng dụng.
Để chọn tất cả các phần tử <p> là con của một phần tử <div>, chúng ta sử dụng biểu thức chọn CSS. Biểu thức chọn CSS là một chuỗi ký tự được sử dụng để chọn các phần tử HTML dựa trên các thuộc tính và vị trí của chúng trong trang web. Trong trường hợp này, chúng ta muốn chọn tất cả các phần tử <p> nằm trong phần tử <div>, không quan tâm đến độ sâu của phần tử <p> so với phần tử <div>. Biểu thức chọn CSS phù hợp cho trường hợp này là "div p", vì nó chọn tất cả các phần tử <p> nằm trong phần tử <div> hoặc là con của phần tử <div>.
Khi sử dụng DTOs và AutoMapper trong ASP.NET Core, một thực hành được khuyến nghị là trả về DTOs từ các controller thay vì các thực thể EF. Điều này giúp phân tách logic kinh doanh khỏi logic của ứng dụng và cải thiện bảo mật. Việc trả về DTOs cũng giúp giảm thiểu rủi ro bị tấn công bằng cách inject các thực thể EF vào các controller. Ngoài ra, việc sử dụng DTOs giúp dễ dàng thay đổi cấu trúc dữ liệu mà không ảnh hưởng đến các controller. Điều này giúp tăng cường khả năng mở rộng và bảo trì của ứng dụng.
Phần định nghĩa chức năng của dịch vụ là phương thức Greet trong interface IGreeterService. Phương thức này có nhiệm vụ nhận vào một tham số tên và trả về một chuỗi thông điệp chào đón. Điều này được thể hiện rõ ràng qua cách sử dụng từ khóa 'string' để định nghĩa kiểu dữ liệu trả về và tham số 'name' để nhận vào thông tin tên của người dùng. Phương thức này được sử dụng trong giao tiếp giữa client và server để thực hiện chức năng chào đón.
REST (Representational State of Resource) là một kiến trúc ứng dụng dựa trên các nguyên tắc và hạn chế cụ thể để đảm bảo tính linh hoạt,scalability và dễ dàng bảo trì. Một trong những hạn chế quan trọng của REST là giao tiếp không có trạng thái (Stateless communication). Điều này có nghĩa là mỗi yêu cầu từ client đến server phải chứa tất cả thông tin cần thiết để xử lý yêu cầu đó, mà không cần dựa vào trạng thái trước đó của giao tiếp. Điều này giúp tăng tính linh hoạt và dễ dàng mở rộng hệ thống. Ví dụ, khi client gửi yêu cầu để lấy thông tin về một tài khoản, server không cần lưu trữ trạng thái của giao tiếp trước đó, mà chỉ cần xử lý yêu cầu dựa trên thông tin được gửi kèm theo. Hạn chế này giúp đảm bảo tính nhất quán và dễ dàng bảo trì hệ thống.
Trong kiến trúc Microservices, API Gateway đóng vai trò là điểm truy cập chính để giao tiếp với các dịch vụ micro. Ocelot là một trong những lựa chọn phổ biến để sử dụng làm API Gateway. Nó cung cấp các tính năng như cân bằng tải, bảo mật, và phân phối yêu cầu đến các dịch vụ micro khác nhau. Ocelot cũng cho phép cấu hình linh hoạt và dễ dàng tích hợp với các dịch vụ khác nhau. Ngoài ra, Ocelot cũng hỗ trợ các giao thức như HTTP/1.1, WebSockets và gRPC. Vì vậy, Ocelot là một lựa chọn tốt để sử dụng làm API Gateway trong kiến trúc Microservices.
Trong WCF, 'ABC' của một endpoint được viết tắt bởi ba từ khóa quan trọng. 'A' đứng cho 'Address', đó là địa chỉ của endpoint. Địa chỉ này có thể là một URL hoặc một địa chỉ IP. 'B' đứng cho 'Binding', đó là cách thức kết nối giữa client và server. Binding xác định các thông số như giao thức truyền tải, giao thức bảo mật và giao thức truyền thông. 'C' đứng cho 'Contract', đó là giao dịch hoặc dịch vụ được cung cấp bởi endpoint. Contract xác định các phương thức và dữ liệu được truyền qua giao dịch.