Web API Content Negotiation

Đàm phán nội dung API Web ASP.NET

Trong bài viết này, tôi sẽ thảo luận về  Đàm phán nội dung API Web ASP.NET với một ví dụ. Vui lòng đọc bài viết trước của chúng tôi, nơi chúng tôi đã thảo luận về  Dịch vụ API Web ASP.NET bằng cơ sở dữ liệu SQL Server . Từ quan điểm kiến ​​trúc còn lại, rất quan trọng để hiểu khái niệm Đàm phán nội dung trong Web API. Là một phần của bài viết này, chúng ta sẽ thảo luận về các khái niệm quan trọng sau đây liên quan đến Đàm phán nội dung.
  1. Đàm phán nội dung là gì và nó cần thiết trong Dịch vụ nghỉ ngơi?
  2. Làm thế nào để Khung API Web biết định dạng mà khách hàng mong đợi phản hồi?
  3. Hiểu các tiêu đề Chấp nhận và Loại nội dung trong một yêu cầu.
  4. Ví dụ để triển khai Đàm phán nội dung trong ứng dụng API Web ASP.NET.
  5. Làm cách nào để yêu cầu dữ liệu ở Định dạng JSON?
  6. Làm cách nào để yêu cầu dữ liệu ở Định dạng XML?
  7. Khung API Web làm gì khi chúng tôi yêu cầu dữ liệu ở định dạng cụ thể?
Đàm phán nội dung là gì và nó cần thiết trong Dịch vụ nghỉ ngơi?
Chúng tôi biết rằng có ba trụ cột của Internet và đó là:
  1. Nguồn tài nguyên
  2. URL
  3. Sự đại diện
Hai cái đầu tiên là (tức là tài nguyên và URL) rất đơn giản nhưng cái cuối cùng (nghĩa là đại diện) hơi khó hiểu. Các đại diện là rất quan trọng trong các web hiện đại. Tại sao? Bởi vì mọi người hiện không chỉ sử dụng máy tính để bàn để duyệt web mà còn sử dụng nhiều loại thiết bị khác nhau (tab, thiết bị di động, v.v.) để sử dụng các ứng dụng web. Và điều quan trọng và thực tế thú vị là tất cả các thiết bị khác nhau này đều mong đợi dữ liệu ở các định dạng khác nhau.
Ví dụ: một số khách hàng muốn dữ liệu ở dạng HTML thông thường trong khi một số người trong số họ muốn dữ liệu ở định dạng văn bản bình thường. Những người khác có thể cần dữ liệu ở định dạng JSON và một số người khác muốn dữ liệu ở định dạng XML.
Định nghĩa đàm phán nội dung:
Chúng ta có thể xác định đàm phán nội dung như “ quá trình lựa chọn các đại diện tốt nhất cho một phản ứng đưa ra khi có nhiều cơ quan đại diện có sẵn ”.
Một trong những tiêu chuẩn của dịch vụ REST là khách hàng nên có khả năng quyết định, trong đó định dạng mà họ muốn phản ứng - cho dù họ muốn phản ứng trong XML hoặc JSON vv . Điều này được gọi là Đàm phán nội dung.
Bây giờ, thực tế cần phải rõ ràng rằng đàm phán nội dung API Web Web có nghĩa là máy khách và máy chủ có thể thương lượng. Luôn luôn Không thể trả lại dữ liệu ở định dạng được yêu cầu bởi Máy chủ. Đó là lý do tại sao nó được gọi là đàm phán, không phải là nhu cầu. Trong các trường hợp như vậy, Máy chủ API Web sẽ trả về dữ liệu ở định dạng mặc định.
Làm thế nào để Khung API Web biết định dạng mà khách hàng muốn phản hồi?
Điều này được thực hiện bằng cách kiểm tra các tiêu đề bên dưới của đối tượng yêu cầu.
  1. Content-type : Yêu cầu giá trị tiêu đề loại nội dung cho Máy chủ API Web để thể hiện dữ liệu theo định dạng này. Các giá trị cho Kiểu nội dung bao gồm ứng dụng / json Tải , ứng dụng / xml , v.v.
  2. AcceptGiá trị tiêu đề Chấp nhận chỉ định các loại phương tiện có thể chấp nhận được cho phản hồi, chẳng hạn như ứng dụng / json và ứng dụng / xml tựa hoặc bất kỳ loại phương tiện tùy chỉnh nào khác, chẳng hạn như ứng dụng / vnd.dotnettutorials.emp NHÂN + xml .
  3. Accept-Charset: Các  Accept-Charset quy định cụ thể tiêu đề mà các bộ ký tự là chấp nhận được, chẳng hạn như UTF-8 hoặc ISO 8859-1.
  4. Accept-Encoding: Các  Accept-Encoding quy định cụ thể tiêu đề mà mã hóa nội dung là chấp nhận được, chẳng hạn như gzip .
  5. Accept-Language:  Các Accept-Language  tiêu đề xác định sự hỗ trợ ngôn ngữ tự nhiên ưa thích, chẳng hạn như “ en-us “.
Hiểu các tiêu đề Chấp nhận và Loại nội dung:
Một yêu cầu được gửi đến máy chủ bao gồm các tiêu đề Chấp nhận và Loại nội dung. Sử dụng tiêu đề Chấp nhận và Loại nội dung, khách hàng có thể chỉ định định dạng cho phản hồi. Ví dụ
Kiểu nội dung: application / xml  trả về XML
Kiểu nội dung: application / json  trả về JSON
Chấp nhận: application / xml  trả về XML
Accept: application / json  trả về JSON
Tùy thuộc vào tiêu đề Chấp nhận và giá trị Loại nội dung trong đối tượng yêu cầu, máy chủ sẽ gửi phản hồi. Điều này được gọi là Đàm phán nội dung API Web. 
Ví dụ để hiểu Đàm phán nội dung trong ASP.NET Web API.
Trong bài viết này, chúng tôi sẽ làm việc với cùng một ví dụ mà chúng tôi đã bắt đầu trong bài viết trước, nơi chúng tôi đã thảo luận về quy trình từng bước làm việc với SQL Server .
Dưới đây là bộ điều khiển của chúng tôi
  • namespace EmployeeService.Controllers
  • {
  • public class EmployeesController : ApiController
  • {
  • public IEnumerable<Employee> Get()
  • {
  • using (EmployeeDBContext dbContext = new EmployeeDBContext())
  • {
  • return dbContext.Employees.ToList();
  • }
  • }
  • public Employee Get(int id)
  • {
  • using (EmployeeDBContext dbContext = new EmployeeDBContext())
  • {
  • return dbContext.Employees.FirstOrDefault(e => e.ID == id);
  • }
  • }
  • }
  • }
Làm cách nào để yêu cầu dịch vụ API web trả về dữ liệu ở định dạng JSON?
Định dạng JSON hiện là định dạng phổ biến nhất của biểu diễn dữ liệu. Vì vậy, trước tiên, chúng ta sẽ xem cách trả về dữ liệu ở định dạng JSON từ API Web. Chúng tôi đang sử dụng một công cụ có tên Fiddler để kiểm tra các dịch vụ API. Vì vậy, vui lòng đọc cách sử dụng Fiddler để kiểm tra hướng dẫn API web trước khi tiếp tục bài viết này.
Dưới đây là thông tin tiêu đề HTTP của chúng tôi để nhận thông tin chi tiết về nhân viên có id là 1. Chọn Tab Soạn. Sau đó chọn động từ HTTP là phiên bản GET GET. Sau đó cung cấp URL và nhấp vào nút Thực thi như trong hình bên dưới.
Làm cách nào để yêu cầu dịch vụ API web trả về dữ liệu ở định dạng JSON?
Ở đây bạn có thể thấy rằng chúng tôi đã không đặt giá trị tiêu đề Kiểu nội dung để yêu cầu dữ liệu ở định dạng JSON nhưng API Web trả lại dữ liệu ở định dạng JSON . Lý do là theo mặc định, API Web sẽ trả về dữ liệu ở định dạng JSON nếu chúng tôi không chỉ định bất kỳ tiêu đề Kiểu nội dung kiểu nào trong các yêu cầu. Xem đầu ra sau đây.
Làm cách nào để yêu cầu dịch vụ API web trả về dữ liệu ở định dạng JSON?
Và rõ ràng, chúng ta cũng có thể sửa đổi giá trị tiêu đề như sau để lấy dữ liệu ở định dạng JSON .
Đàm phán nội dung trong API Web ASP.NET
Cả hai yêu cầu sẽ cho chúng ta cùng một đầu ra trong thực tế.
Làm cách nào để yêu cầu Máy chủ API Web trả về dữ liệu ở định dạng XML?
Trong ví dụ này, chúng tôi sẽ yêu cầu API Web trả về dữ liệu ở định dạng XML. Khi ứng dụng sử dụng các thông báo dựa trên SOAP (không phải SOAP đã lỗi thời trong các ứng dụng hiện đại, nó vẫn ở đó nhưng mọi người thích sử dụng JSON thông minh hơn là quá nhiều XML thông tin và ngột ngạt).
Bây giờ để có được dữ liệu ở định dạng XML, chúng ta cần đặt tiêu đề Kiểu nội dung của Yêu cầu http thành application / xml như dưới đây.
Làm cách nào để yêu cầu Máy chủ API Web trả về dữ liệu ở định dạng XML?
Khi bạn nhấp vào nút thực thi, bạn sẽ nhận được dữ liệu ở định dạng XML như trong hình bên dưới.
Đàm phán nội dung API Web ASP.NET
Hai định dạng trên là các định dạng (tức là JSON và XML) mà API Web hỗ trợ theo mặc định. Nếu bạn muốn khác với hai loại biểu diễn này thì bạn cần triển khai một trình định dạng loại phương tiện trong API Web.
Hiểu Tiêu đề chấp nhận trong Yêu cầu http:
Trong các ví dụ trước của chúng tôi, chúng tôi đã thấy cách một tiêu đề loại nội dung hoạt động với Yêu cầu http. Trong ví dụ này, chúng ta sẽ hiểu tiêu đề Chấp nhận của Viking về Yêu cầu http.
Bằng cách kiểm tra giá trị tiêu đề của Chấp nhận trước, API Web hiểu rằng đại diện cho khách hàng có thể chấp nhận. Ví dụ: nếu chúng tôi chỉ định rằng máy khách có thể hiểu các cách biểu thị sau: application / xml, application / json , text / javascript Sau đó, API Web sẽ trả về dữ liệu ở định dạng JSON, lý do là JSON là định dạng mặc định của API Web , mặc dù ưu tiên đầu tiên của khách hàng là định dạng XML. Chúng tôi sẽ chứng minh điều đó bằng một ví dụ nhỏ. Có một cái nhìn vào màn hình sau đây.
Yêu cầu với tiêu đề chấp nhận:
Hiểu Tiêu đề chấp nhận trong Yêu cầu http
Và đầu ra sẽ là
Đàm phán nội dung trong API Web
Hiểu tiêu đề Ngôn ngữ chấp nhận
Trong tiêu đề Ngôn ngữ chấp nhận , chúng tôi có thể chỉ định ngôn ngữ ưa thích mà chúng tôi muốn nhận từ ứng dụng API Web. Các Accept-Language tiêu đề được sử dụng như Accept-Language: en-IN, en-US
Tiêu đề Ngôn ngữ chấp nhận ở trên chỉ ra rằng lựa chọn ngôn ngữ đầu tiên của tôi là tiếng Anh Ấn Độ nhưng nếu điều đó là không thể thì xin vui lòng cho tôi biết tiếng Anh Mỹ và nếu điều đó là không thể thì vui lòng cung cấp dữ liệu bằng ngôn ngữ mặc định.
Vì vậy, đàm phán Nội dung API Web là một cơ chế hoặc thuật toán, được sử dụng để xác định, dựa trên yêu cầu của khách hàng, định dạng loại phương tiện nào sẽ được sử dụng để trả về phản hồi API. Trong bài viết tiếp theo, chúng ta sẽ thảo luận về định dạng loại phương tiện là gì và cách nó hoạt động với một số ví dụ.
Khung API Web làm gì khi chúng tôi yêu cầu dữ liệu ở định dạng cụ thể?
Bộ điều khiển trong API Web trước tiên tạo dữ liệu mà chúng tôi muốn gửi cho khách hàng. Ví dụ, nếu chúng tôi đã yêu cầu danh sách nhân viên. Trình điều khiển API Web tạo danh sách nhân viên và trao dữ liệu cho đường dẫn API Web, sau đó xem  giá trị tiêu đề Chấp nhận và tùy thuộc vào định dạng mà khách hàng yêu cầu, API Web sẽ chọn định dạng thích hợp. Ví dụ: nếu máy khách đã yêu cầu dữ liệu ở định dạng XML, thì API Web sử dụng Trình định dạng XML. tương tự, nếu khách hàng đã yêu cầu dữ liệu ở định dạng JSON, thì API Web sử dụng Trình định dạng JSON. Những trình định dạng được gọi là Media Type F ormatters .
API Web ASP.NET rất mở rộng. Điều này có nghĩa là chúng ta cũng có thể bổ trợ các trình định dạng riêng của mình để định dạng dữ liệu tùy chỉnh. Nhiều giá trị cũng có thể được chỉ định cho tiêu đề Chấp nhận. Trong trường hợp này, máy chủ chọn bộ định dạng đầu tiên là bộ định dạng JSON và định dạng dữ liệu trong JSON.
Chấp nhận: ứng dụng / xml, ứng dụng / json
Bạn cũng có thể chỉ định một yếu tố chất lượng. Trong ví dụ dưới đây, XML có yếu tố chất lượng cao hơn JSON, vì vậy máy chủ sử dụng định dạng XML và định dạng dữ liệu trong XML.
ứng dụng / xml ; q = 0,8, ứng dụng / json ; q = 0,5
Nếu bạn không chỉ định tiêu đề Chấp nhận trong yêu cầu thì theo mặc định, API Web sẽ trả về dữ liệu ở định dạng JSON.
Khi phản hồi được gửi đến máy khách, lưu ý rằng tiêu đề Kiểu nội dung của phản hồi được đặt thành giá trị phù hợp. Ví dụ: nếu máy khách đã yêu cầu ứng dụng / xml, thì máy chủ sẽ gửi dữ liệu theo định dạng XML và cũng đặt  Content-Type = application / xml .
Vai trò của Trình định dạng loại phương tiện:
API Web sử dụng các trình định dạng cho cả thông báo yêu cầu và phản hồi. Khi máy khách đưa ra yêu cầu đến máy chủ, máy khách phải đặt tiêu đề Kiểu nội dung thành giá trị phù hợp để cho máy chủ biết định dạng của dữ liệu mà chúng tôi đang gửi. Ví dụ: nếu máy khách đang gửi dữ liệu JSON, tiêu đề Kiểu nội dung được đặt thành application / json. Máy chủ biết rằng nó đang xử lý dữ liệu JSON, vì vậy nó sử dụng trình định dạng JSON để chuyển đổi dữ liệu JSON thành Loại .NET. Tương tự, khi một phản hồi đang được gửi từ máy chủ đến máy khách, tùy thuộc vào giá trị tiêu đề Chấp nhận, bộ định dạng thích hợp được sử dụng để chuyển đổi loại .NET thành JSON, XML, v.v.
Chúng ta cũng có thể dễ dàng thay đổi cài đặt nối tiếp của các trình định dạng này. Ví dụ: nếu chúng ta muốn dữ liệu JSON được thụt lề chính xác và sử dụng trường hợp lạc đà thay vì trường hợp Pascal cho tên thuộc tính, tất cả những gì chúng ta phải làm là sửa đổi cài đặt tuần tự hóa của trình định dạng JSON như dưới đây. Với ví dụ của chúng tôi, mã này đi vào tệp WebApiConfig.cs trong thư mục App_Start.
config.Formatters.JsonFormatter.SerializerSinstall.Formatted = Newtonsoft.Json.Formatted.Inent;
config.Formatters.JsonFormatter.SerializerSinstall.ContractResolver = new CamelCasePropertyNamesContractResolver ();

Trong bài viết tiếp theo, tôi sẽ thảo luận về Trình định dạng loại phương tiện trong API Web với một ví dụ. Ở đây, trong bài viết này, tôi cố gắng giải thích từng bước đàm phán nội dung API Web API với một số ví dụ. Tôi hy vọng bây giờ bạn đã hiểu Đàm phán nội dung trong API Web.

CodeLean.vn

Post a Comment

Mới hơn Cũ hơn