API REST Thực tiễn tốt nhất: lập luận trong chuỗi truy vấn so với trong thân yêu cầu


125

API REST có thể có các đối số ở một số vị trí:

  1. Trong phần thân yêu cầu - Là một phần của phần thân json hoặc loại MIME khác
  2. Trong chuỗi truy vấn - vd/api/resource?p1=v1&p2=v2
  3. Là một phần của đường dẫn URL - ví dụ:/api/resource/v1/v2

Các thực tiễn và cân nhắc tốt nhất về việc lựa chọn giữa 1 và 2 ở trên là gì?
2 vs 3 được bảo hiểm ở đây .


Điều này có trả lời câu hỏi của bạn không? API REST Thực tiễn tốt nhất: Đặt tham số ở đâu?
Steve Chambers

Ngoài những điều trên, làm thế nào về việc sử dụng tiêu đề?
biến

Câu trả lời:


39

Các thực tiễn và cân nhắc tốt nhất về việc lựa chọn giữa 1 và 2 ở trên là gì?

Thông thường phần thân nội dung được sử dụng cho dữ liệu sẽ được tải lên / tải xuống / từ máy chủ và các tham số truy vấn được sử dụng để chỉ định dữ liệu chính xác được yêu cầu. Ví dụ: khi bạn tải lên một tệp, bạn chỉ định tên, loại mime, v.v. trong phần thân nhưng khi bạn tìm nạp danh sách các tệp, bạn có thể sử dụng các tham số truy vấn để lọc danh sách theo một số thuộc tính của tệp. Nói chung, các tham số truy vấn là thuộc tính của truy vấn không phải dữ liệu.

Tất nhiên đây không phải là một quy tắc nghiêm ngặt - bạn có thể thực hiện nó theo bất kỳ cách nào bạn thấy phù hợp hơn / làm việc cho bạn.

Bạn cũng có thể muốn kiểm tra bài viết trên wikipedia về chuỗi truy vấn , đặc biệt là hai đoạn đầu tiên.


1
Một lý do hợp lý cho phân tích trên của bạn là các hoạt động bình thường được giữ tốt nhất trong chuỗi truy vấn url và CRUD được giữ tốt nhất cho các cơ quan phản hồi được gõ nghiêm ngặt, về cơ bản tận dụng lợi thế của SOP và ngăn chặn các hình thức tấn công lừa đảo / kỹ thuật xã hội rất cơ bản
Rice

15

Tôi sẽ cho rằng bạn đang nói về các yêu cầu POST / PUT. Về mặt ngữ nghĩa, cơ quan yêu cầu nên chứa dữ liệu bạn đang đăng hoặc vá.

Chuỗi truy vấn, như một phần của URL (URI), nó ở đó để xác định tài nguyên bạn đang đăng hoặc vá.

Bạn yêu cầu một thực tiễn tốt nhất, sau ngữ nghĩa là của tôi. Tất nhiên sử dụng quy tắc ngón tay cái của bạn sẽ hoạt động, đặc biệt nếu khung web bạn sử dụng trừu tượng này thành các tham số .

Bạn biết nhiều nhất:

  • Một số máy chủ web có giới hạn về độ dài của URI.
  • Bạn có thể gửi các tham số bên trong thân yêu cầu bằng CURL.
  • Nơi bạn gửi dữ liệu không nên có tác dụng trong việc gỡ lỗi.

6

Sau đây là quy tắc của tôi ...

Khi nào nên sử dụng cơ thể:

  • Khi các đối số không có khóa phẳng: cấu trúc giá trị
  • Nếu các giá trị không thể đọc được của con người, chẳng hạn như dữ liệu nhị phân được tuần tự hóa
  • Khi bạn có một số lượng lớn các đối số

Khi nào nên sử dụng chuỗi truy vấn:

  • Khi các đối số là như vậy mà bạn muốn nhìn thấy chúng trong khi gỡ lỗi
  • Khi bạn muốn có thể gọi chúng theo cách thủ công trong khi phát triển mã, ví dụ như với curl
  • Khi đối số là phổ biến trên nhiều dịch vụ web
  • Khi bạn đã gửi một loại nội dung khác, chẳng hạn như application/octet-stream

Lưu ý rằng bạn có thể trộn và kết hợp - đặt những cái phổ biến, những cái nên gỡ lỗi trong chuỗi truy vấn và ném tất cả phần còn lại vào json.


34
Chọn cách cấu trúc API của bạn dựa trên sự thuận tiện phát triển không phải là một cách làm tốt.
Eric Stein

1
Giống như @EricStein đã nói, bạn đã hiểu điều đó.
DanMan

20
Các bạn, lý do tôi đặt câu hỏi là để có câu trả lời đúng. Hãy tiếp tục, viết câu trả lời và tôi sẽ xóa câu trả lời thiếu sót của tôi. @EricStein
Jonathan

4
Apis @Jonathan dễ tiêu thụ qua bàn tay con người hầu như luôn là apis tốt. Kudos đã gọi chính xác KISS
Chris Marisic

1
@AkshayHiremath Anh ấy đề cập đến thực tế là bạn có thể đang gửi một thứ khác trong cơ thể, ví dụ: nếu bạn đã gửi một tiêu đề ContentType như "image / jpeg", bạn sẽ cần có phần thân thông điệp của mình chứa dữ liệu jpeg và không thể bao gồm bất cứ điều gì khác trong nó
Shayaan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.