2012-07-30 5 views
11

나는 내 자신의 안정적인 API를 작성했으며 API에서 반환 된 많은 양의 레코드를 처리하는 가장 좋은 방법에 대해 궁금해합니다.안정적인 API - 많은 양의 데이터 처리

예를 들어, GET 메서드를 myapi.co.uk/messages/으로 사용하면 모든 메시지 레코드에 대해 XML이 반환되는 경우가 있는데,이 경우 일부는 1000s가 될 수 있습니다. 따라서 API를 매우 느리게 사용하게됩니다.

누구나이 문제를 해결하는 가장 좋은 방법을 제안 할 수 있습니까? 결과를 일괄 적으로 반환하고 요청에서 일괄 처리 크기를 지정하는 것이 표준입니까?

답변

12

추가 매개 변수를 포함하도록 API를 변경하여 응용 프로그램에서 반환하는 데이터의 범위를 제한 할 수 있습니다.

예를 들어 limitoffset 매개 변수를 추가하여 작은 부분 만 가져올 수 있습니다. 이것이 REST에 따라 페이지 매김을 수행하는 방법입니다. 이와 같이 요청하면 21에서 30까지 메시지 수집에서 10 개의 리소스를 가져올 수 있습니다. 당신은 거대한 데이터 세트의 특정 부분을 요청할 수 있습니다이 방법 :

myapi.co.uk/messages?limit=10&offset=20 

페이로드를 감소하는 또 다른 방법은 자원 '표현의 특정 부분을 요청하는 것입니다. 여기에 페이스 북이 그것을 수행하는 방법은 다음과 같습니다

/joe.smith/friends?fields=id,name,picture 

다음 방법 중 하나를 사용하는 동안, 당신은 클라이언트가 각 자원을 발견 할 수있는 방법을 제공해야 할 것을 기억하십시오. 매개 변수를보고 데이터 검색시 변경을 시작한다고 가정 할 수는 없습니다. 그것은 REST 패러다임의 위반 일 것입니다. 그것을 피하기 위해 필요한 하이퍼 링크를 제공하십시오.

this presentation on RESTful API designapigee으로 표시 할 것을 강력히 권장합니다 (스크린 캐스트는 "개를 가르쳐 쥐고 가르치기"라고합니다). 일상적인 문제에 접근하기위한 우수 사례와 깔끔한 아이디어가 여기에서 논의됩니다.

편집 : 나는이 대답을 게시 때문에 비디오는 여러 번 업데이트되었습니다, 당신은, 덕분에 매우 도움 년대 3rd edition from January 2013

+0

을 확인할 수 있습니다. – LeeTee

+0

링크 된 프리젠 테이션은 멋지다 : 엄격하고 유익한 정보 – kiedysktos

+0

@toniedzwiedz 서버가 20 개의 리소스를 가질 때 클라이언트가 제한 10 및 오프셋 0을 사용하여 처음 10 개의 리소스를 가져 왔다고 가정하고 나머지 리소스를 가져 오는 다른 요청을 보내기 전에 삭제 된 리소스가 거의없는 경우 (1-5)를 사용한다면 클라이언트는이 접근 방식에서 11 번째에서 15 번째까지 리소스를 어떻게 가져 옵니까? 그 이유는 다음 가져 오기 클라이언트가 오프셋 10에서 요청하여 11 번째에서 15 번째 데이터가 누락 될 것이기 때문입니다. 클라이언트가 삭제 된 자원을 추적하지 않고이를 해결하는 또 다른 방법이 있습니까? – thavasidurai

관련 문제