Json có tốt hơn html không?

Cả JSON và XML đều có thể được sử dụng để nhận dữ liệu từ máy chủ web

Các ví dụ JSON và XML sau đây đều định nghĩa một đối tượng nhân viên, với một mảng gồm 3 nhân viên

Ví dụ JSON

{"nhân viên". [
  { "firstName". "John", "Họ". "Doe" },
  { "firstName". "Anna", "Họ". "Smith" },
  { "firstName". "Peter", "Họ". "Jones" }
]}

Ví dụ XML


 
   JohnDoe
  
  
   AnnaSmith
 
  
   PeterJones
 

JSON giống như XML bởi vì

  • Cả JSON và XML đều "tự mô tả" [con người có thể đọc được]
  • Cả JSON và XML đều có thứ bậc [giá trị trong giá trị]
  • Cả JSON và XML đều có thể được phân tích cú pháp và được sử dụng bởi nhiều ngôn ngữ lập trình
  • Cả JSON và XML đều có thể được tìm nạp bằng XMLHttpRequest

JSON không giống như XML bởi vì

  • JSON không sử dụng thẻ kết thúc
  • JSON ngắn hơn
  • JSON nhanh hơn để đọc và viết
  • JSON có thể sử dụng mảng

Sự khác biệt lớn nhất là

XML phải được phân tích cú pháp bằng trình phân tích cú pháp XML. JSON có thể được phân tích cú pháp bằng hàm JavaScript tiêu chuẩn

Tại sao JSON tốt hơn XML

XML khó phân tích cú pháp hơn nhiều so với JSON.
JSON được phân tích cú pháp thành đối tượng JavaScript sẵn sàng sử dụng.

Đối với các ứng dụng AJAX, JSON nhanh hơn và dễ dàng hơn XML

Sử dụng XML

  • Lấy một tài liệu XML
  • Sử dụng XML DOM để lặp qua tài liệu
  • Trích xuất các giá trị và lưu trữ trong các biến

Sử dụng JSON

  • Lấy một chuỗi JSON
  • JSON. Phân tích chuỗi JSON

Mặc dù JSON có lợi ích về kích thước [cũng như băng thông] và tính đơn giản [dễ phân tích cú pháp hơn một chút đối với điện thoại thông minh], nhưng sự thay đổi lớn như vậy trong việc thay thế ngôn ngữ này bằng ngôn ngữ khác sẽ quá gián đoạn để biện minh cho mức tăng nhỏ về băng thông và hiệu suất. Những lợi ích như vậy có thể phù hợp cách đây 10 năm khi các thiết bị di động rất hạn chế về CPU và khi nhiều người chỉ có quyền truy cập internet tốc độ thấp, nhưng ngày nay, điều đó ít phù hợp hơn nhiều

Nếu bạn không tin, hãy lấy một trang web thương mại điện tử bình thường, đo thời gian sử dụng

  1. Tải xuống và phân tích cú pháp [đôi khi được rút gọn và thường được nén và lưu vào bộ đệm ở phía máy khách] HTML

và so sánh nó với thời gian cần thiết để

  1. Tải xuống nguồn JavaScript được rút gọn,
  2. Tải hình ảnh,
  3. Tải CSS xuống,
  4. Phân tích cú pháp CSS,
  5. Kết xuất trang,
  6. Thực thi JavaScript

Bây giờ, nếu bạn xác định rằng sau khi rút gọn HTML, gzip nó và thêm bộ nhớ đệm phía máy khách, việc tải và phân tích cú pháp HTML vẫn là nút cổ chai trên trang web của bạn, không có gì cấm bạn, sử dụng các tiêu chuẩn hiện tại, để tạo một trang web AJAX hoàn chỉnh, gửi

JSON Rich Text Editor lưu trữ nội dung ở định dạng văn bản thuần túy, có thể được hiểu và xử lý bởi tất cả các ngôn ngữ lập trình. Trong khi HTML RTE bị giới hạn và ràng buộc đối với đánh dấu HTML

Nội dung có định dạng JSON giúp các nhà phát triển hiển thị nội dung cho bất kỳ khung giao diện người dùng nào với tính linh hoạt và khả năng tương tác cao

Mã HTML trong trình xem mã nguồn

This RTE is amazing.

Mã phản hồi JSON RTE

{
  "entry":{
    "title":"Entry 1",
    "json_rte":{
      "type":"doc",
      "attrs":{
        
      },
      "uid":"a52aa19f3af54a61a32f1724831dc084",
      "children":[
        {
          "type":"p",
          "attrs":{
            
          },
          "uid":"c0a9f4affcef4409b3d23857d35f863b",
          "children":[
            {
              "text":"This RTE is "
            },
            {
              "text":"amazing",
              "bold":true
            },
            {
              "text":"."
            }
          ]
        }
      ],
      "_version":2
    },
    "tags":[
      "json_rte"
    ],
    "locale":"en-us",
    "uid":"bltc4d873bf4fd6f624",
    "created_by":"blt7b815b05d2fe5dd8",
    "updated_by":"blt7b815b05d2fe5dd8",
    "created_at":"2021-07-15T09:51:40.418Z",
    "updated_at":"2021-07-15T09:52:54.900Z",
    "ACL":{
      
    },
    "_version":2,
    "_in_progress":false
  }
}

Với trình chỉnh sửa dựa trên JSON, nhà phát triển có thể xử lý thành phần HTML và người quản lý nội dung có thể tập trung hoàn toàn vào việc tạo kiểu và tạo nội dung chất lượng cao

Do đó, bạn sẽ nhận thấy một sự khác biệt đáng kể giữa HTML và JSON RTE, đó là sự vắng mặt của trình xem mã nguồn HTML

Tuy nhiên, giao tiếp giữa máy chủ và trình duyệt không chỉ là một loạt các tải trọng JSON ngẫu nhiên và khung JavaScript. Có những ý tưởng ẩn đằng sau Web hầu như không được nói ra và chúng đã tồn tại hơn 10 năm

Hãy nói về một trong số họ

Chính xác hơn, hãy nói về cách Loại nội dung text/html có thể cung cấp nền tảng tốt hơn để xây dựng Giao diện lập trình ứng dụng. Trường hợp sử dụng cho điều này là khi bạn muốn hiển thị quy trình làm việc của trang web cho một số loại ứng dụng khách không trực quan nhất định khi bạn đã có một trang web ngữ nghĩa

Bạn có thể áp dụng một số nguyên tắc cơ bản này trong API XML tùy chỉnh. Tuy nhiên, bài đăng này không phải về XML. Với XML, bạn tạo một bản trình bày mới cho trang web của mình cho một mục đích khác trong một URL khác với URL mà bạn cung cấp cho giao diện người dùng

Bạn cũng có thể áp dụng hầu hết các nguyên tắc cơ bản này trong API JSON tùy chỉnh. Tuy nhiên, bên cạnh điểm tương tự với XML ở trên, để API JSON trở nên hữu ích, bạn cần chọn một đặc tả định dạng thông báo hypermedia như Jasonette, Mason, Collection+JSON, HAL hoặc API JSON, có chi phí

Không có vấn đề gì với XML hoặc JSON. Tuy nhiên, nếu bạn định tiết lộ quy trình làm việc của trang web, thì có những lựa chọn thay thế. Bài đăng này chỉ dành cho các trường hợp sử dụng khi bạn đã có một trang web cung cấp dữ liệu trực quan để con người sử dụng nó. Trong trường hợp đó, bạn cũng muốn hiển thị quy trình làm việc tương tự cho các máy

Các kiểu nội dung giống HTML có thể cung cấp nền tảng tốt hơn để xây dựng các API cho Web

Hãy cùng bắt đầu lại từ đầu

Khi bạn phân phối công khai các tệp tĩnh từ máy tính của mình, bộ chứa S3 hoặc Trang Github, bạn cần có máy chủ web. Nếu bạn đang phục vụ một trang web, thì máy chủ đó phải trả về HTML trong lần tương tác đầu tiên với máy chủ đó, ngay cả khi đó là một thẻ tập lệnh để tải một loạt mã JavaScript

Sự hiểu biết đó là rất quan trọng

Điều mà nhiều nhà phát triển không hiểu là HTML mà máy chủ tạo ra chỉ đơn thuần là một thông báo, giống như một mẩu thông tin mà nó truyền qua mạng. Thông tin đó tình cờ được mã chạy bên trong trình duyệt hiểu. Đặc tả HTML xác định cách trình duyệt hiển thị thông báo đó một cách trực quan theo cách tương thích ngược

Tuy nhiên, HTML không chỉ để kết xuất. Bạn có thể thêm siêu dữ liệu vào đánh dấu để các loại ứng dụng khách không trực quan khác có thể diễn giải nó

Có một máy chủ ở đâu đó, ngay cả khi bạn không nhìn thấy nó

Cách đây rất lâu, có một Công cụ Tìm kiếm tên là Google có một ý tưởng hấp dẫn để xếp hạng mức độ liên quan của các trang web. Họ đã làm như vậy bằng cách viết mã có thể đọc HTML và tìm kiếm các siêu liên kết []. Sau khi họ lập chỉ mục có bao nhiêu trang web đang liên kết với nhau, họ có thể nhanh chóng kiểm tra trang nào phù hợp hơn những trang khác. Bằng cách này, khi người dùng tra cứu cụm từ tìm kiếm, các trang web có liên quan nhất sẽ luôn ở đầu kết quả tìm kiếm

Google đã thêm rất nhiều kinh nghiệm bổ sung kể từ lần đầu tiên họ thu thập thông tin trên web. Tuy nhiên, các nguyên tắc cơ bản của việc thu thập dữ liệu siêu liên kết vẫn còn đó. Một vài nơi

Bạn có thể dễ dàng viết phần mềm có thể hiểu tác giả của một trang web muốn nói gì. Dựa vào cách đặc tả HTML xác định HTML và siêu liên kết, tác giả của tập lệnh thu thập dữ liệu và tác giả của trang không cần biết nhau;

Ví dụ mã cho biết cách phân tích cú pháp tệp HTML bằng JavaScript để tìm siêu liên kết. Có một chức năng với tên "chỉ mục cho các liên kết" chấp nhận một chuỗi HTML. Hàm phân tích cú pháp HTML và truy vấn tất cả các thẻ neo. Sau đó, nó sử dụng các hàm “map” và “reduce” để trả về cấu trúc dữ liệu chứa các liên kết và số lần xuất hiện của các liên kết đó trong trang

Căn cứ vào cách HTML định nghĩa các thẻ neo, bạn có thể viết mã để thu thập dữ liệu bất kỳ trang web nào và theo các liên kết, miễn là tác giả của trang web có thể tạo ra một thông điệp có ý nghĩa tuân theo đặc tả HTML về cách tạo các neo.

Trình thu thập thông tin web không phải là loại máy khách duy nhất không quan tâm đến cách trình duyệt hiển thị HTML. Mã dành cho tập lệnh tự động kiểm tra headless, chẳng hạn như Selenium hoặc Chrome Headless, chỉ quan tâm đến cách xác định các thành phần cụ thể của trang. Mã tự động hóa không quan tâm liệu công cụ kiểm tra cơ bản có phải mô phỏng kết xuất trình duyệt đầy đủ hay không

Ví dụ: nếu bạn muốn kiểm tra cách hoạt động của một hệ thống xác thực, bạn viết một tập lệnh có thể xác định các trường nhập và biểu mẫu để gửi. Nếu bạn đang thử nghiệm một trang web mà bạn kiểm soát, thì bạn có thể viết các thuộc tính trong phần đánh dấu để xác định các phần tử đó. Bằng cách này, các thuộc tính đó trở thành hợp đồng giữa máy khách và máy chủ để xác định các thành phần trong trang cho tập lệnh tự động hóa thử nghiệm. Miễn là chúng vẫn ở đúng vị trí sau khi bạn cấu trúc lại HTML, mã phụ thuộc vào chúng sẽ không bao giờ bị hỏng

Ví dụ mã hiển thị tập lệnh kiểm tra gửi biểu mẫu phản hồi. Tập lệnh tìm kiếm các lớp “biểu mẫu phản hồi” để gửi biểu mẫu và “nội dung phản hồi” để nhập phản hồi dưới dạng văn bản

Nếu máy chủ thêm xác thực ở những nơi khác, chẳng hạn như menu điều hướng, mã bạn viết cho tập lệnh tự động hóa không cần thay đổi

Nó hoạt động. Mãi mãi

Ví dụ mã hiển thị tập lệnh kiểm tra gửi biểu mẫu phản hồi trong trang có biểu mẫu trong thanh điều hướng. Tập lệnh, được biểu thị bằng chức năng "gửi phản hồi", không thay đổi nhưng vẫn hoạt động, ngay cả khi trình duyệt hiển thị biểu mẫu theo một cách hoàn toàn khác. Nhìn vào sự khác biệt của HTML từ ví dụ này với ví dụ trước

Bạn có thể nâng cao HTML của trang web để cung cấp các thuộc tính mà tập lệnh tự động hóa thử nghiệm có thể sử dụng. Tập lệnh tự động kiểm tra đó hiểu quy trình làm việc của trang web

Với tất cả những điều này, bạn có thể muốn tạo các thuộc tính cụ thể nhằm hướng tới các tập lệnh tự động hóa thử nghiệm. Ví dụ: thuộc tính “thử nghiệm” có giá trị “mở chi tiết sản phẩm” hoặc thuộc tính “QA” có giá trị “thanh toán. ”

Sai rồi

Hãy nhớ rằng có những khách hàng khác ngoài tập lệnh tự động hóa thử nghiệm có thể quan tâm đến quy trình làm việc của trang web. Nếu bạn xác định các yếu tố bằng cách sử dụng các thuộc tính có liên quan đến những gì trang web cho phép mọi người làm, thì các loại khách hàng khác có thể sử dụng nó, không chỉ thử nghiệm các tập lệnh tự động hóa

Thay vì thuộc tính “thử nghiệm” với giá trị “mở chi tiết sản phẩm”, hãy ưu tiên một "lớp" với giá trị "mở chi tiết sản phẩm. ” Thay vì thuộc tính "QA" trong thẻ liên kết có giá trị "tác giả", hãy ưu tiên thuộc tính "rel" có giá trị "tác giả. " Khả năng chi trả cuối cùng này, thuộc tính liên kết rel, là một tiêu chuẩn trong hơn 20 năm

Không thể thay đổi tên hoặc giá trị của một thuộc tính khi nó bắt đầu được sử dụng bởi mã mà bạn không kiểm soát trừ khi bạn tạo một phần tử mới. Martin Fowler gọi đây là PublishedInterface. Việc xây dựng các thuộc tính dành riêng cho thử nghiệm tạo ra sự liên kết giữa tập lệnh tự động hóa thử nghiệm và các thuộc tính của trang web. Nếu bạn đặt tên cho các thuộc tính bằng thuật ngữ dành riêng cho ứng dụng khách tự động hóa thử nghiệm, thì tên đó sẽ không có ý nghĩa gì đối với ứng dụng khách không phải là tập lệnh tự động hóa thử nghiệm

Không tạo các thuộc tính HTML dành riêng cho thử nghiệm

Đây là một ví dụ về một loại ứng dụng khách khác bên cạnh tập lệnh tự động hóa thử nghiệm

Giả sử bạn làm việc trên một trang web Mạng xã hội có giao diện người dùng xấu. Công ty thuê một nhà thiết kế mới để thiết kế lại trang web. Nhà thiết kế muốn biết trình kích hoạt mà người dùng nhấp để cập nhật cài đặt quyền riêng tư của họ

Trong một tình huống thực tế, giải pháp hiệu quả nhất là đứng dậy khỏi ghế và nói chuyện với các nhà phát triển. Tuy nhiên, mọi người đang làm việc từ xa ở các múi giờ khác nhau. Truyền thông phải không đồng bộ

Các nhà phát triển quyết định viết mã trang web theo một cách khác để giải quyết vấn đề này. Một số nút có thể kích hoạt cài đặt quyền riêng tư của người dùng được đánh dấu bằng một lớp chứa tiền tố “tên công ty” và “quyền riêng tư. ”

Trong trang có nguồn cấp tin tức của Mạng xã hội này, có nút tắt “luôn đăng dưới dạng ẩn danh” với lớp “quyền riêng tư của công ty luôn ẩn danh. ” Trong trang “cài đặt”, trong nhóm “quyền riêng tư”, có một nút có cùng ngữ nghĩa. Ở cả hai nơi, chức năng là như nhau. Do đó, nó có cùng lớp

Các nhà phát triển viết một tập lệnh mà nhà thiết kế có thể thêm vào dấu trang trình duyệt của họ. Mỗi khi nhà thiết kế đăng nhập vào trang web trong môi trường thử nghiệm, họ có thể nhấp vào tập lệnh và nó sẽ làm nổi bật tất cả các điều khiển quyền riêng tư trên màn hình

Ví dụ mã cho biết tập lệnh cho dấu trang của nhà thiết kế sẽ như thế nào. Nó có chức năng “mô phỏng đánh dấu đánh dấu. ” Hàm truy vấn tất cả các thành phần có lớp “quyền riêng tư của công ty luôn ẩn danh”, lặp lại chúng và thêm một đường viền màu đỏ có kích thước 3 pixel

Trong ví dụ trên, cũng có mối quan hệ máy khách-máy chủ. Ứng dụng khách là mã JavaScript mà nhà thiết kế thực thi từ dấu trang. Máy chủ là Mô hình đối tượng tài liệu phục vụ siêu dữ liệu cho tập lệnh để xác định các kiểm soát quyền riêng tư nào được hiển thị. Trong bối cảnh này, khách hàng là người tiêu dùng siêu dữ liệu;

Các thuộc tính HTML không dành riêng cho một khách hàng nhất định. Do đó, bạn cũng có thể đọc chúng từ tập lệnh kiểm thử tự động. Bạn không cần thực hiện thay đổi đối với trang web trừ khi đó là để thêm số nhận dạng mới cho một thành phần khác trên trang. Tất cả các tập lệnh xử lý các phần tử hiện có luôn hoạt động, chúng tồn tại qua thử thách của thời gian mà không ảnh hưởng đáng kể đến khả năng bảo trì khi bạn thêm một phần tử mới vào trang

Ngoài ra, bạn có thể phát hành các thuộc tính đó dưới dạng API công khai. Bạn có thể triển khai mọi thứ vào sản xuất để khách hàng bên thứ ba có thể dễ dàng viết cùng loại tập lệnh để đọc quy trình làm việc của trang web dưới dạng máy không trực quan chứ không phải người dùng trực quan

Bạn có thể nâng cao HTML của trang web để cung cấp các thuộc tính mà bất kỳ tập lệnh nào cũng có thể sử dụng, kể cả người tiêu dùng bên thứ ba

Những nguyên tắc này không chỉ dành cho HTML. Bạn có thể làm điều tương tự với JSON thô

  • Bạn trả về một loạt các thuộc tính “liên kết” có thể trỏ đến các trang hoặc trang web khác
  • Bạn thiết kế các điểm cuối có thể trả về JSON tùy chỉnh để biểu thị dữ liệu trang web của bạn và viết tập lệnh kiểm tra cho dữ liệu đó

Tuy nhiên, chỉ vì bạn có thể, điều đó không có nghĩa là bạn nên

Hãy tưởng tượng bạn đang viết mã dựa trên cấu trúc JSON thô dành riêng cho mọi trang. Có mức độ khớp nối cao giữa mã bạn viết và thông báo được viết bằng JSON. Lý tưởng nhất là bạn sẽ viết mã để duyệt qua cấu trúc thông báo và có tiêu chuẩn hoặc ngôn ngữ về cách xác định các thuộc tính. Điều đó có toàn bộ chi phí phát triển của riêng nó

Nếu máy chủ trả về HTML và mã máy khách sử dụng trình phân tích cú pháp, chẳng hạn như “bộ chọn truy vấn” để tìm các thuộc tính cụ thể nhằm xác định các phần tử, thì máy chủ có thể thay đổi toàn bộ cấu trúc của HTML mà không làm hỏng máy khách. Bạn cũng không cần phải viết bất kỳ mã nào để duyệt qua tin nhắn; . Ngôn ngữ đánh dấu siêu văn bản

Theo mặc định, cấu trúc của HTML không dành riêng cho trang web. Bạn có thể thêm, đổi tên hoặc xóa thẻ và trình duyệt sẽ hiển thị trang theo cách khác, nó sẽ không bị hỏng. Chức năng “bộ chọn truy vấn” hiểu đặc tả HTML. Miễn là các thuộc tính nằm trong các phần tử phù hợp, khách hàng cũng sẽ không bị hỏng. Nếu có một yêu cầu có thể khiến bạn phải đổi tên một thuộc tính, thì đó nên được coi là một yếu tố mới để tương thích ngược

Ví dụ về mã hiển thị phản hồi ở dạng JSON chứa dữ liệu về vĩ độ của Sydney. Đoạn mã truy xuất vĩ độ và xuất ra cảnh báo bằng hàm có tên "lấy vĩ độ từ. "

Ví dụ mã giống như trước đây, chỉ là bây giờ máy chủ đã đổi tên thuộc tính “locations” thành “khu vực. ” Mã chức năng "lấy vĩ độ từ" bị hỏng và cảnh báo không hoạt động. Lỗi là "Không thể đọc thuộc tính 'Sydney' của không xác định. " Để xem, hãy mở đoạn trích trong trang web JSFiddle, sau đó quan sát Bảng điều khiển trình duyệt

Mã truy xuất vĩ độ từ thông báo ở trên đọc cấu trúc JSON thô dành riêng cho trang web. Do đó, nó bị hỏng khi máy chủ thay đổi cấu trúc. Nói cách khác, các khái niệm dành riêng cho miền được kết hợp với định dạng trao đổi thông báo. Điều đó không xảy ra nếu bạn sử dụng HTML và "bộ chọn truy vấn" vì miền không được kết hợp với định dạng thư, như bạn có thể thấy trong các ví dụ bên dưới

Một ví dụ về mã JavaScript hiển thị phản hồi trong HTML có chứa dữ liệu về vĩ độ của Sydney. Mã truy xuất vĩ độ bằng cách sử dụng chức năng "bộ chọn truy vấn tất cả" của trình duyệt và xuất ra trong một cảnh báo

Ví dụ mã giống như trước đây, chỉ là bây giờ máy chủ đã đổi tên danh sách không có thứ tự thành danh sách mô tả. Ngoài ra, máy chủ đã đổi tên tiêu đề từ “Locations” thành “Regions. ” Không có thay đổi nào trong số đó phá mã cho chức năng "lấy vĩ độ từ. " Cảnh báo luôn hoạt động, miễn là phần tử có lớp "sydney-latitude" có giá trị chính xác

Các ví dụ HTML lưu trữ giá trị của vĩ độ trong một mảng. Giả sử bạn có nhiều vĩ độ cho Sydney ở các địa điểm khác nhau, bạn có thể thêm phần tử "vĩ độ sydney" mới và mã vẫn hoạt động

Ví dụ mã giống như trước đây, chỉ là bây giờ có một vĩ độ mới trong "danh sách mô tả" cho khu vực "Sydney". Cảnh báo đưa ra cả hai vĩ độ được phân tách bằng dấu phẩy

Hàm “tất cả bộ chọn truy vấn” hiểu loại nội dung text/html và do đó có thể phân tích cú pháp nó. Nếu máy chủ thay đổi cấu trúc của tin nhắn, mã vẫn hoạt động. Với thông số kỹ thuật của hypermedia, bạn có thể sử dụng mã do người khác viết, chẳng hạn như "bộ chọn truy vấn" và đảm bảo mã đó không bao giờ bị hỏng

Nếu máy chủ trả về JSON thô dưới dạng phản hồi, thì máy khách phải viết mã được liên kết chặt chẽ với cấu trúc. Bất kỳ thay đổi đáng kể nào đối với cấu trúc đều phá vỡ khách hàng

Nếu bạn muốn sử dụng JSON và tạo sự tích hợp mạnh mẽ giữa hai máy tính sử dụng HTTP cho nhiều mục đích khác nhau, bạn cần sử dụng một đặc tả hypermedia tiêu chuẩn có thể cho bạn biết vị trí máy chủ nên đặt mã định danh và vị trí khách hàng nên tìm kiếm chúng. Bạn cần chọn một đặc tả hypermedia như Jasonette, Mason, Collection+JSON, HAL hoặc JSON API

Bạn cần một ngôn ngữ

Bằng cách đó, bạn có thể có một API mạnh mẽ như chính HTML

Tuy nhiên, nếu máy chủ không sử dụng thông số kỹ thuật nào cho các phản hồi của họ, bạn phải viết mã cụ thể để chỉ diễn giải các thông báo cho trang web đó. Điều đó tạo ra khớp nối và chi phí phát triển đáng kể

Cách giải quyết phổ biến nhất đối với một API mỏng manh không có ngôn ngữ — trong đó mọi thay đổi nhỏ có thể làm hỏng ứng dụng khách — là bắt đầu gửi các phiên bản trong URL hoặc tiêu đề thay vì tạo phiên bản cho thư hoặc ứng dụng khách. Do không có thông số kỹ thuật và mọi thay đổi có thể phá vỡ nội dung, bạn cần thêm phiên bản và tăng chi phí bảo trì trang web

Roy Fielding đã có nhiều lời phàn nàn về nó trong quá khứ

Một Tweet từ Roy T. Fielding, tác giả của phong cách kiến ​​trúc REST. Nó nói rằng. "Lý do để tạo API REST thực sự là để có được khả năng phát triển. “V1” là ngón giữa đối với khách hàng API của bạn, biểu thị RPC/HTTP [không phải REST]"

Nếu bạn xem cách trình duyệt viết mã chống lại HTML, bạn sẽ thấy nó đã giải quyết được vấn đề lập phiên bản API. Bạn có thể thay đổi cấu trúc của trang web và trang sẽ không bị hỏng, không cần lập phiên bản trang web. Miễn là cú pháp HTML phù hợp với DOCTYPE và trình duyệt hỗ trợ phần tử hoặc thuộc tính đó, bạn có thể hiển thị nội dung nào đó một cách chính xác mà không vi phạm bất kỳ điều gì

HTML là một API cho trình duyệt. Những gì HTML có là một đặc điểm kỹ thuật có thể cung cấp miễn phí cho bạn rất nhiều lợi ích mà một API được xây dựng bằng JSON mà không có đặc tả hypermedia không có

HTML không chỉ là một thứ kỳ diệu để hiển thị một trang web. Máy chủ viết trên ngôn ngữ đó để tạo API mà trình duyệt có thể sử dụng và cung cấp giá trị cho các máy khách trực quan — con người. Nó cũng có thể được làm giàu bởi máy chủ để cung cấp siêu dữ liệu cho các máy khách không trực quan — các máy

server -> HTML ->          browser           -> human brain
server -> HTML metadata -> Some HTML parser -> machine

Bạn có thể viết HTML theo cách có thể cho phép các loại máy khách khác hiểu những gì máy chủ đang cố nói

  • Theo các liên kết đến các trang hoặc trang web khác
  • Viết các kịch bản kiểm thử tự động không cần thay đổi nếu các thành phần của trang thay đổi
  • Viết tập lệnh đánh dấu có thể làm nổi bật các yếu tố nhất định
  • Hiển thị API công khai cho người tiêu dùng bên thứ ba để hiểu quy trình làm việc của trang web

Do có một chi phí đáng kể để áp dụng đặc tả hypermedia phù hợp cho JSON, nếu bạn đã có một trang web trả về API text/html cho ứng dụng khách trực quan, hãy sử dụng như một mặc định hợp lý để nâng cao HTML của trang web và tận dụng một đặc tả đã được thử nghiệm trong trận chiến đã có ở đó

Một tweet từ Matt McClure để đáp lại tweet trước đó từ Roy Fielding. Nó nói rằng. "Và không phải cung cấp cho khách hàng của bạn một API REST mà không có công cụ phát triển ứng dụng khách để bổ sung cho nó cũng là đưa ngón tay giữa cho họ sao?"

HTML không chỉ để kết xuất. Nó không chỉ dành cho trình duyệt

HTML là một định dạng thông báo tuyệt vời có thể được bổ sung để làm nền tảng xây dựng các API tuyệt vời và hiển thị thông tin về quy trình làm việc của trang web mà không cần nỗ lực nhiều và có Lợi tức đầu tư cao. Trong trường hợp cụ thể này, bạn hoàn toàn không cần JSON

Tại sao JSON là tốt nhất?

JSON là một cách cực kỳ thành công để định dạng dữ liệu vì nhiều lý do. Đầu tiên, nó có nguồn gốc từ JavaScript và nó được sử dụng bên trong các chương trình JavaScript dưới dạng ký tự JSON . Bạn cũng có thể sử dụng JSON với các ngôn ngữ lập trình khác, vì vậy nó hữu ích cho việc trao đổi dữ liệu giữa các hệ thống không đồng nhất. Cuối cùng, nó là con người có thể đọc được.

Nhược điểm của JSON là gì?

Bảo mật - JSON có thể nguy hiểm nếu được sử dụng với các trình duyệt hoặc dịch vụ không đáng tin cậy . Dịch vụ JSON trả về phản hồi JSON mà trình duyệt sử dụng trực tiếp và nếu trình duyệt không an toàn, nó có thể bị tấn công. Do đó, nó làm cho các dịch vụ web dễ bị tấn công bởi các loại tấn công mạng khác nhau.

Tôi có nên tải xuống dữ liệu Facebook ở dạng HTML hoặc JSON không?

Ghi chú. Chọn HTML để lưu trữ dữ liệu của bạn dễ xem và đánh giá . Đó là tùy chọn tốt nhất cho hầu hết người dùng. Chọn định dạng JSON nếu bạn muốn nhập dữ liệu của mình vào một ứng dụng hoặc dịch vụ khác. Bạn cũng có thể cuộn xuống danh sách “Thông tin của bạn” và kiểm tra những gì bạn muốn hoặc không muốn tải xuống.

Tại sao JSON hiệu quả hơn?

JSON nhanh hơn vì nó được thiết kế đặc biệt để trao đổi dữ liệu . Mã hóa JSON ngắn gọn, yêu cầu ít byte hơn để chuyển tiếp. Trình phân tích cú pháp JSON ít phức tạp hơn, đòi hỏi ít thời gian xử lý và chi phí bộ nhớ hơn. XML chậm hơn, bởi vì nó được thiết kế cho nhiều thứ hơn là chỉ trao đổi dữ liệu.

Chủ Đề