ReSTful API는 주로 다른 시스템에서 사용되기 때문에 응답 헤더에 페이징 데이터를 넣습니다. 그러나 일부 API 사용자는 응답 헤더에 직접 액세스하지 못하거나 API를 통해 UX를 구축 할 수 있으므로 JSON 응답의 메타 데이터를 필요할 때 검색 할 수있는 방법을 제공하는 것이 좋습니다.
구현시 요청할 때 기본적으로 컴퓨터가 읽을 수있는 메타 데이터와 사람이 읽을 수있는 메타 데이터가 포함되어야합니다. 사람이 읽을 수있는 메타 데이터는 원하는 경우 모든 요청과 함께 또는 include=metadata
또는 include_metadata=true
과 같은 쿼리 매개 변수를 통해 주문형으로 반환 될 수 있습니다.
특정 시나리오에서 레코드와 함께 각 제품의 URI를 포함합니다. 이렇게하면 API 소비자가 개별 제품에 대한 링크를 쉽게 만들 수 있습니다. 또한 페이징 요청의 한계에 따라 합당한 기대치를 설정합니다.페이지 크기에 대한 기본 설정을 구현하고 문서화하는 것은 허용되는 방법입니다. 예를 들어 GitHub's API은 기본 페이지 크기를 최대 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 headers를 추가 :
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
(링크 헤더 값을 URL 인코딩해야 함)
... 그리고 아마도 사용자 정의,236,347,818,응답 헤더, 그렇게 선택하는 경우 : 링크 헤더 제가 오전하는 페이지 알려으로 인간 중심의 메타 데이터에 공개
total-count: 521
다른 페이징 데이터, 기계 중심의 메타 데이터에 대한 불필요한 될 수있는 페이지 당 숫자를 표시하고 배열의 레코드 수를 빠르게 검색 할 수 있습니다. 따라서 전체 카운트의 머리글 만 만들 수 있습니다. 나중에 언제든지 마음을 바꿔 더 많은 메타 데이터를 추가 할 수 있습니다.
제쳐두고, URI에서 /index
을 삭제했을 수 있습니다. ReST 끝점에서 컬렉션을 노출하도록하는 것이 일반적으로 허용되는 규칙입니다. 끝 부분에 /index
을 가볍게 두드리는 것.
다음은 API를 사용하거나 만들 때 가지고있는 몇 가지 예입니다. 희망이 도움이됩니다!
per_page가 page_size –
''page_count ': 20'' 및'{ "last": "/ products? page = 26 & per_page = 20"}'규칙을 따르지 않습니까? –
페이지 1에서 페이지 x까지 모든 레코드를 가져 오는 동안 제품 수가 갑자기 증가한다면 어떻게됩니까? – MeV