Tiếng Việt

Công cụ dành cho nhà phát triển · JSON trình định dạng và xác thực

Cách JSON thay thế XML làm định dạng mặc định cho API web

· Lý lịch

json tiêu chuẩn xác nhận

Cách JSON thay thế XML làm định dạng mặc định cho API web được minh họa bằng mã thông báo JSON và ranh giới xác thực chính xác
Hình minh họa vector ToolAcre gốc

Hai mươi năm trước XML là định dạng giả định cho mọi thứ được gửi giữa các hệ thống. Bài đăng này theo dõi cách JSON thay thế nó trong API web, mỗi định dạng được thiết kế cho mục đích gì và tại sao XML vẫn thống trị một số miền.

Còn một SOAP điểm cuối

Còn lại một điểm cuối SOAP — một tích hợp nói XML trong cơ sở mã nơi mọi thứ khác nói JSON và câu hỏi về cách chúng tôi đạt được điều này. Sự tương phản thường xuất hiện trong mã máy khách: một đường dẫn quản lý các phong bì, không gian tên và các loại được tạo, trong khi các điểm cuối mới hơn trao đổi các đối tượng thông thường thông qua các thư viện HTTP nhẹ. Quan sát đó mô tả một kiến ​​trúc địa phương chứ không phải một niên đại phổ quát.

Trình định dạng chỉ xử lý JSON; chuyển đổi định dạng chéo thuộc về bảng chuyển đổi Cú pháp riêng biệt. Mức độ phổ biến của JSON không làm cho XML trở nên lỗi thời và việc in ấn đẹp mắt tại địa phương cũng không xác nhận hợp đồng API. Bài viết này phân biệt việc áp dụng lịch sử với hành vi hẹp hơn được thực hiện trên tuyến đường này. Những tuyên bố lịch sử không được chứng minh về ngày quyết định, nguyên nhân hoặc sự thay thế trên toàn thị trường đều được cố tình bỏ qua hoặc sửa chữa thay vì suy luận từ các khoản vỡ nợ ngày nay.

XML được xây dựng để làm gì

XML được xây dựng để làm gì — tài liệu có nội dung hỗn hợp, không gian tên, lược đồ và quy trình chuyển đổi. Các phần tử có thể chứa cả đánh dấu văn bản và đánh dấu con, các thuộc tính có thể mang siêu dữ liệu và các tên đủ tiêu chuẩn về không gian tên cho phép các từ vựng cùng tồn tại. Các công nghệ như XML Lược đồ, XPath và XSLT hỗ trợ xác thực, truy vấn và chuyển đổi trong các quy trình công việc tập trung vào tài liệu.

Những khả năng đó không phải là miễn phí khi tải trọng là một ấn phẩm, tài liệu kinh doanh đã ký hoặc thông điệp ngành có thể mở rộng. Họ áp đặt nhiều khái niệm hơn yêu cầu trao đổi đối tượng và mảng đơn giản. Do đó, việc so sánh các ví dụ tương đương nên xem xét hợp đồng chứ không chỉ đơn thuần là số ký tự: XML và JSON hiển thị các công cụ lập mô hình khác nhau và không cú pháp nào tự động cung cấp ngữ nghĩa miền chính xác.

Những gì trình duyệt có thể làm một cách tự nhiên

Những gì trình duyệt có thể thực hiện một cách tự nhiên — XMLHttpRequest có thể truy xuất định dạng văn bản và các trình duyệt cung cấp tính năng phân tích cú pháp XML DOM. Mã JavaScript ban đầu đôi khi được đánh giá văn bản giống JSON, một phương pháp không an toàn khi dữ liệu đầu vào không đáng tin cậy; `JSON.parse` được chuẩn hóa sau đó đã cung cấp một trình phân tích cú pháp chuyên dụng. JSON được phân tích cú pháp ánh xạ tự nhiên tới JavaScript mảng, đối tượng, chuỗi, số, boolean và null.

Việc ánh xạ đó làm giảm bớt nghi thức đối với nhiều ứng dụng trình duyệt nhưng không phải là bằng chứng cho thấy các trình duyệt không thể xử lý XML hoặc chỉ một API quyết định việc áp dụng. XML DOM bảo tồn các thành phần, thuộc tính và không gian tên thay vì tự động trở thành đối tượng đơn giản. Các khẳng định lịch sử về quan hệ nhân quả cần các nguồn ngoài sự tiện lợi khi thực hiện, vì vậy các phiên bản không được hỗ trợ sẽ bị bỏ qua hoặc sửa chữa ở đây.

Những bước ngoặt — các API web công cộng đã cung cấp JSON cùng với XML, sau đó chỉ JSON và REST thay thế SOAP cho hầu hết các dịch vụ mới

Những bước ngoặt — nhiều API web công cộng hiển thị JSON cùng với XML và nhiều dịch vụ sau này đã chọn JSON làm đại diện chính của chúng. Các kiểu HTTP nhẹ cũng trở nên phổ biến đối với các API ứng dụng trong khi SOAP vẫn tồn tại trong các hệ sinh thái đã được thiết lập. Thị phần chính xác, động lực đầu tiên và ngày thay đổi tùy theo nguồn và không thể được thiết lập từ kho lưu trữ định dạng này.

Theo đó, những tuyên bố lịch sử không được hỗ trợ sẽ bị bỏ qua hoặc sửa chữa thay vì chuyển thành một câu chuyện có nguyên nhân rõ ràng. Cơ chế có thể bảo vệ được là áp lực về khả năng tương tác: thư viện khách hàng, tài liệu, công cụ và các dịch vụ lân cận củng cố một định dạng sau khi các nhóm chuẩn hóa xung quanh nó. Phản hồi đó có thể giải thích các mặc định cục bộ mà không khẳng định rằng XML đã biến mất hoặc mọi REST API đều sử dụng JSON.

Chi phí chuyển đổi

Chi phí chuyển đổi — JSON không có sự phân biệt cơ bản giữa thuộc tính và phần tử con, không có mô hình nội dung hỗn hợp và không có cú pháp nhận xét. Ngữ pháp cơ sở JSON cũng không xác định lược đồ ứng dụng. Các nhóm cần hợp đồng sẽ thêm các hệ thống riêng biệt như JSON Lược đồ hoặc OpenAPI, mỗi hệ thống có các quyết định về từ vựng, công cụ và phiên bản riêng.

Do đó, việc chuyển đổi có thể làm mất thông tin trừ khi ánh xạ được thiết kế rõ ràng. Các phần tử XML lặp lại có thể trở thành mảng, các tên đủ tiêu chuẩn về không gian tên cần được biểu diễn và văn bản xen kẽ với đánh dấu không phải lúc nào cũng trở thành một đối tượng đơn giản một cách rõ ràng. Cú pháp tải trọng đơn giản hơn chuyển một số phức tạp sang các hợp đồng hoặc quy ước bên ngoài; nó không làm cho việc xác nhận, tiến hóa và tài liệu trở nên không cần thiết.

Nơi XML vẫn thắng

Trong đó XML vẫn thắng — quy trình xuất bản được hưởng lợi từ nội dung hỗn hợp và từ vựng tài liệu đã được thiết lập, trong khi các định dạng văn phòng gói XML để thể hiện các tài liệu phong phú. Các tiêu chuẩn thông điệp doanh nghiệp và tài chính hoàn thiện có thể dựa vào không gian tên, lược đồ, chữ ký hoặc đầu tư công cụ lâu dài. Việc thay thế cú pháp sẽ yêu cầu sự phối hợp của hệ sinh thái chứ không chỉ là tải trọng mẫu ngắn hơn.

XML cũng hữu ích khi các phép biến đổi và truy vấn dựa trên đường dẫn là trọng tâm của quy trình làm việc. JSON có thể phân phối các miền này với các quy ước bổ sung, giống như XML có thể phân phối các API thông thường nhưng giá trị di chuyển phải vượt quá chi phí hợp đồng và công cụ. Mức độ phổ biến trong các dịch vụ sử dụng trình duyệt không phải là bằng chứng về tính ưu việt cho mọi vấn đề trình bày và các tuyên bố không được hỗ trợ về tổng dịch chuyển sẽ được sửa chữa hoặc bỏ qua.

Điều này không bao gồm những gì

Điều này không bao gồm những gì - các lựa chọn thay thế nhị phân như Bộ đệm giao thức và MessagePack, cạnh tranh theo các điều khoản khác nhau. Kích thước dây, yêu cầu lược đồ, hành vi truyền phát và công cụ của chúng cần được đánh giá riêng. Điều này cũng không so sánh các quy ước hypermedia, giao thức truyền tải hoặc kiểu API; SOAP so với REST không chỉ đơn giản là XML so với JSON và một trong hai đại diện có thể đi qua HTTP.

Đây cũng không phải là lịch sử định lượng có nguồn gốc của việc áp dụng API. Các tuyên bố chính xác về ngày tháng, tỷ lệ phần trăm, lần triển khai đầu tiên hoặc nguyên nhân toàn ngành không được hỗ trợ bởi bằng chứng kho lưu trữ được liệt kê, vì vậy chúng bị bỏ qua hoặc sửa chữa. Thay vào đó, bài viết giải thích các khả năng định dạng có thể quan sát được và các hậu quả kỹ thuật hợp lý mà không đưa ra những hậu quả đó làm bằng chứng cho một câu chuyện lịch sử hoàn chỉnh.

Bài học rút ra: JSON đã thắng nhờ sự đơn giản chứ không phải sự hoàn chỉnh

Bài học rút ra: JSON đã trở thành mặc định chung cho nhiều API web thông qua mô hình dữ liệu nhỏ gọn, hỗ trợ trực tiếp bằng các ngôn ngữ phổ biến và công cụ mở rộng xung quanh chứ không phải vì nó chứa mọi tính năng mà XML cung cấp. XML vẫn phù hợp khi cấu trúc tài liệu, không gian tên, phép biến đổi hoặc lược đồ đã thiết lập là trung tâm. Lựa chọn định dạng tuân theo hợp đồng và hệ sinh thái hơn là xếp hạng chung.

ToolAcre phản ánh mô hình thu hẹp của JSON bằng cách phân tích cú pháp, xác thực và in đẹp JSON trên tuyến đường này; nó không chứng nhận ngữ nghĩa API hoặc làm cho XML trở nên lỗi thời. Chỉ sử dụng chuyển đổi định dạng chéo khi ánh xạ được xác định sẽ lưu giữ thông tin cần thiết. Giữ lịch sử cẩn thận như nhau: những tuyên bố không được hỗ trợ về các bước ngoặt đơn lẻ hoặc sự thay thế hoàn toàn bị bỏ qua hoặc sửa chữa, để lại các cơ chế và hành vi hiện tại có thể được bảo vệ.