이론적으로는 무엇이든지 모호성이있을 수 있기 때문에 {id}
URL 의 일부가 하위 리소스와 겹치는 것을보고 싶지 않습니다 id
. 서로 다른 개념 (식별자와 하위 리소스 이름)을 혼합하고 있습니다.
비슷한 문제가 종종에서 볼 수 있습니다 enum
당신은 폴더가있을 때, 상수 또는 다른 개념이 (혼합 예를 들어 구조물, 폴더 Tigers
, Lions
그리고 Cheetahs
다음도라는 폴더 Animals
같은 수준은 - 하나의 부분 집합으로이 말도 안돼 다른).
일반적으로 엔드 포인트의 마지막 명명 된 부분은 한 번에 하나의 엔티티를 처리하는 경우 단수 여야하고 엔티티 목록을 처리하는 경우 복수 여야합니다.
따라서 단일 사용자를 다루는 엔드 포인트 :
GET /user -> Not allowed, 400
GET /user/{id} -> Returns user with given id
POST /user -> Creates a new user
PUT /user/{id} -> Updates user with given id
DELETE /user/{id} -> Deletes user with given id
그런 다음 사용자에 대한 쿼리를 수행하기위한 별도의 리소스가 있으며 일반적으로 목록을 반환합니다.
GET /users -> Lists all users, optionally filtered by way of parameters
GET /users/new?since=x -> Gets all users that are new since a specific time
GET /users/top?max=x -> Gets top X active users
다음은 특정 사용자를 다루는 하위 리소스의 예입니다.
GET /user/{id}/friends -> Returns a list of friends of given user
친구를 사귀십시오 (다 대다 링크).
PUT /user/{id}/friend/{id} -> Befriends two users
DELETE /user/{id}/friend/{id} -> Unfriends two users
GET /user/{id}/friend/{id} -> Gets status of friendship between two users
모호성이 없으며 자원의 복수 또는 단수 이름은 사용자가 기대할 수있는 것 (목록 또는 객체)에 대한 힌트입니다. 에 대한 제한은 없으므로 id
이론적 new
으로 (잠재적 미래) 하위 리소스 이름과 겹치지 않고 ID 를 가진 사용자를 가질 수 있습니다.