ReSTful API는 주로 다른 시스템에서 사용하기 때문에 응답 헤더에 페이징 데이터를 넣습니다. 그러나 일부 API 소비자는 응답 헤더에 직접 액세스 할 수 없거나 API를 통해 UX를 구축 할 수 있으므로 요청시 JSON 응답에서 메타 데이터를 검색하는 방법을 제공하는 것이 장점입니다.
구현에는 기계가 읽을 수있는 메타 데이터가 기본으로 포함되어야하고 요청시 사람이 읽을 수있는 메타 데이터가 포함되어야한다고 생각합니다. 사람이 읽을 수있는 메타 데이터는 원하는 경우 모든 요청과 함께 반환 될 수 있으며, 가급적이면 include=metadata
또는 같은 쿼리 매개 변수를 통해 필요에 따라 반환 될 수 있습니다.include_metadata=true
.
특정 시나리오에서는 레코드와 함께 각 제품의 URI를 포함합니다. 이렇게하면 API 소비자가 개별 제품에 대한 링크를 쉽게 만들 수 있습니다. 또한 페이징 요청의 한계에 따라 합리적인 기대치를 설정했습니다. 페이지 크기에 대한 기본 설정을 구현하고 문서화하는 것이 허용되는 방법입니다. 예를 들어 GitHub의 API 는 기본 페이지 크기를 최대 100 개의 레코드 30 개로 설정하고 API를 쿼리 할 수있는 횟수에 대한 속도 제한을 설정합니다. API에 기본 페이지 크기가있는 경우 쿼리 문자열은 페이지 색인 만 지정할 수 있습니다.
사람이 읽을 수있는 시나리오에서로 이동할 때 /products?page=5&per_page=20&include=metadata
응답은 다음과 같을 수 있습니다.
{
"_metadata":
{
"page": 5,
"per_page": 20,
"page_count": 20,
"total_count": 521,
"Links": [
{"self": "/products?page=5&per_page=20"},
{"first": "/products?page=0&per_page=20"},
{"previous": "/products?page=4&per_page=20"},
{"next": "/products?page=6&per_page=20"},
{"last": "/products?page=26&per_page=20"},
]
},
"records": [
{
"id": 1,
"name": "Widget #1",
"uri": "/products/1"
},
{
"id": 2,
"name": "Widget #2",
"uri": "/products/2"
},
{
"id": 3,
"name": "Widget #3",
"uri": "/products/3"
}
]
}
컴퓨터에서 읽을 수있는 메타 데이터의 경우 응답에 링크 헤더 를 추가 합니다.
Link: </products?page=5&perPage=20>;rel=self,</products?page=0&perPage=20>;rel=first,</products?page=4&perPage=20>;rel=previous,</products?page=6&perPage=20>;rel=next,</products?page=26&perPage=20>;rel=last
(링크 헤더 값은 urlencoded 여야합니다)
... 그리고 total-count
원하는 경우 사용자 지정 응답 헤더가있을 수 있습니다.
total-count: 521
링크 헤더가 내가있는 페이지와 페이지 당 수를 알려주고 배열의 레코드 수를 빠르게 검색 할 수 있기 때문에 인간 중심 메타 데이터에 공개 된 다른 페이징 데이터는 기계 중심 메타 데이터에 불필요 할 수 있습니다. . 따라서 총 개수에 대한 헤더 만 만들 것입니다. 나중에 언제든지 마음을 바꾸고 더 많은 메타 데이터를 추가 할 수 있습니다.
제쳐두고, 내가 /index
당신의 URI에서 제거되었음을 알 수 있습니다 . 일반적으로 허용되는 규칙은 ReST 엔드 포인트가 컬렉션을 노출하도록하는 것입니다. 데 /index
그보다 약간 끝 muddies에.
이것들은 API를 사용 / 생성 할 때 제가 좋아하는 몇 가지 것입니다. 도움이 되었기를 바랍니다.