2013-08-14 30 views
19

Tôi có API RESTful trong một dịch vụ web với một số loại tài nguyên như người dùng, bài đăng, v.v. Khi tôi yêu cầu danh sách bài đăng (GET/posts), tôi muốn truy xuất mảng bài đăng chỉ với phần dữ liệu đã giảm cho mỗi bài đăng (tức là chủ đề, tên tác giả). Khi tôi yêu cầu đăng bài cụ thể (GET/posts/42), tôi muốn lấy danh sách đầy đủ các trường đối tượng bài đăng, bao gồm nội dung bài đăng lớn, thông tin bổ sung về số lượt thích, số lượng nhận xét. Tôi cho rằng nó tồn tại nhiều cách để giải quyết vấn đề này. Trong tâm trí của tôi, 3 rõ ràng nhất là:?Cách để chỉ định danh sách trường của tài nguyên trong yêu cầu RESTful API

  1. Rõ ràng xác định các lĩnh vực Lits trên mọi yêu cầu (/ bài fileds = chủ đề, AUTHOR_NAME và cho /bài viết/42 lĩnh vực = đối tượng, cơ thể, createaAt, AUTHOR_NAME, comments_count, likes_count, v.v ...).
  2. Chỉ định rõ danh sách trường nếu nó khác với danh sách trường mặc định trường.
  3. Chỉ định danh sách trường cần được loại trừ (hoặc inlcuded) từ (đến) trường mặc định được đặt nếu các trường mong muốn khác với mặc định.

Tôi phải xây dựng API rõ ràng và hữu ích cho khách hàng của mình. Tôi nên chọn cách nào?

Trả lời

16

Tôi muốn chọn tùy chọn 2 IMHO.

Vì vậy, nếu người tiêu dùng chỉ yêu cầu url tài nguyên (/ bài đăng/42) họ sẽ nhận được các trường mặc định.

Sau đó, người tiêu dùng có thể thay đổi các phản ứng mặc định bằng cách xác định giá trị trong chuỗi truy vấn như:/bài viết/42/lĩnh vực chủ đề, AUTHOR_NAME

này đã làm việc tốt cho tôi trong quá khứ và là cách một số khác cũng biết API công việc, vd Facebook

Chỉnh sửa: Nhìn lại điều này tôi muốn thay đổi yêu cầu là:/posts/42? Fields = subject, author_name,/post/42 là tài nguyên không phải là trường.

+0

Tôi đồng ý. Nó cung cấp một rào cản thấp để nhập cảnh, vì vậy các nhà phát triển có thể khám phá và có thể dễ dàng nhìn thấy các trường mặc định, nhưng vẫn cung cấp cho sự linh hoạt để yêu cầu chính xác những gì bạn muốn nếu bạn cần. – theon

+0

Tôi cũng có tùy chọn (2), nhưng tôi cho phép 'fields = *' lấy tất cả các trường để truy vấn toàn bộ dễ dàng thực hiện (đặc biệt là nhà phát triển muốn biết hoặc kiểm tra lại xem tập hợp đó là gì). –

5

Đã thực hiện nghiên cứu về vấn đề này và được hướng đến Sơ đồ trang web của Facebook như là một cách thay thế để yêu cầu api an toàn với các trường mong muốn. Nó vẫn còn trong giai đoạn rất sớm nhưng có vẻ rất hứa hẹn.

https://facebook.github.io/react/blog/2015/05/01/graphql-introduction.html

EDIT: sao chép từ URL:

Một GraphQL truy vấn là một chuỗi giải thích bởi một máy chủ trả về dữ liệu trong một định dạng cụ thể. Dưới đây là một truy vấn Ví dụ:

{ 
    user(id: 3500401) { 
    id, 
    name, 
    isViewerFriend, 
    profilePicture(size: 50) { 
     uri, 
     width, 
     height 
    } 
    } 
} 

(Lưu ý: Cú pháp này là hơi khác nhau từ các ví dụ GraphQL trước Chúng tôi vừa được cải tiến với ngôn ngữ..)

Và đây là trả lời truy vấn đó.

{ 
    "user" : { 
    "id": 3500401, 
    "name": "Jing Chen", 
    "isViewerFriend": true, 
    "profilePicture": { 
     "uri": "http://someurl.cdn/pic.jpg", 
     "width": 50, 
     "height": 50 
    } 
    } 
}