2017-05-17 6 views
0

@odata.nextlink을 사용하여 의 정보를 기반으로 Microsoft Graph에서 다음 데이터 페이지를 가져 오는 데 문제가 있습니다. 헤더에서 권한 부여 토큰을 사용하여 원시 GET을 사용하고 있습니다 (예 : 언어 API를 사용하지 않고 Curl을 사용하여 Powershell에서이 코드를 사용하고 있습니다). 다음 스 니펫에서 민감한 데이터를 삭제 한 후이를 x로 바꾸었지만 문제가있는 정보가 나타납니다. 첫 번째 GET 들어 Microsoft Graph NextLink 작동하지 않음

, 나는

https://graph.microsoft.com/beta/drives/b!Gxxxxx-xxxxxxge/root:/ReallyBigFolder:/children?top=200 

와 쿼리 예상대로 나는 200 개 항목과 응답을 얻을. 이 응답의 @odata.nextlink 필드는 $skiptoken=... 부분은 무작위로 보이는 숫자를 가지고, 위의 링크 된 마이크로 소프트 그래프 설명서의 예를 들어

https://graph.microsoft.com/beta/drives/b!Gxxxxx-xxxxxxge/root/children?top=200&$skiptoken=Paged%3dTRUE%26p_SortBehavior%3d0%26p_FileLeafRef%3d279%252ezip%26p_ID%3d208%26p_FileDirRef%3dMaintenance%2520Department%252fReallyBigFolder%26RootFolder%3dMaintenance%2520Department%252fReallyBigFolder 

이지만, 광산 $skiptoken=Paged=TRUE&etc있다. 문서가 작성된 이후로 API가 응답을 변경했거나 광산이 완전히 잘못되었을 수 있습니다.

문서에서 필자는이 URL을 불투명 한 값으로 사용할 수 있어야하며 수정하지 않고 그래프 API (물론 인증 토큰 포함)에서 가져올 수 있어야한다는 점을 이해합니다. 나는이 작업을 수행 할 때, 응답이 내가 다른 200 개 파일을 나열 얻을 것으로 기대하고 있습니다

{"@odata.context":"https://graph.microsoft.com/beta/$metadata#drives('b%21Gxxxxx-xxxxxxge')/root/children","value":[]} 

, 아니 파일이 전혀 반환이 있고,이 루트를 가리키는 사라 경로를 표시하지 않고 그랬던 것처럼 하위 폴더보다.

또한 Graph Explorer에서 /beta/v1.0 끝점을 모두 사용해 보았습니다. 동일한 방식으로 실패합니다.

어디로 잘못 가고 있습니까?

디버그에 대한 세부 정보로 편집 : 참고 : 그래프 탐색기는 헤더의 날짜 필드를 표시하지 않는 것으로 보이므로 이러한 값에 대해 Postman Chrome 플러그인을 사용하고 있습니다.

우선 GET 요청에 응답 헤더

Cache-Control →private 
Content-Encoding →gzip 
Content-Type →application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8 
Date →Fri, 26 May 2017 19:07:54 GMT 
Duration →2033.3889 
OData-Version →4.0 
Transfer-Encoding →chunked 
Vary →Accept-Encoding 
client-request-id →6faf5d1d-a291-410a-b269-f4667187d7cb 
request-id →6faf5d1d-a291-410a-b269-f4667187d7cb 
x-ms-ags-diagnostic →{"ServerInfo":{"DataCenter":"North Central US","Slice":"SliceB","ScaleUnit":"002","Host":"AGSFE_IN_11","ADSiteName":"CHI"}} 

과 넥스트 링크 (보안을 위해 다소 모호한)를 넥스트 링크 생략 헤더 (변경되지 않은 헤더 생성 후

https://graph.microsoft.com/beta/drives/b!xxx-xxxge/root/children?$skiptoken=Paged%3dTRUE%26p_SortBehavior%3d0%26p_FileLeafRef%3d279%252ezip%26p_ID%3d208%26p_FileDirRef%3dGSH%2520Test%252fMaintenance%2520Department%252fReally%2520Big%2520Folder%252fReallyBigFolder%26RootFolder%3d%252fGSH%2520Test%252fMaintenance%2520Department%252fReally%2520Big%2520Folder%252fReallyBigFolder 

으로

beta/drives/b!xxx-xxxge/root:/Really%20Big%20Folder/ReallyBigFolder:/children 

이고) :

Date →Fri, 26 May 2017 19:15:17 GMT 
Duration →512.9537 
client-request-id →6ba61712-a423-4bc8-9376-cc62bf854329 
request-id →6ba61712-a423-4bc8-9376-cc62bf854329 
x-ms-ags-diagnostic →{"ServerInfo":{"DataCenter":"North Central US","Slice":"SliceA","ScaleUnit":"001","Host":"AGSFE_IN_7","ADSiteName":"CHI"}} 

및 결과 신체 :

{ 
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#drives('b%21xxxx-xxxxge')/root/children", 
    "value": [] 
} 
+0

MS Graph에서 얻은 응답에 "Request-ID"헤더와 "Date"헤더의 값을 포함 할 수 있습니까? 그러면 로그를 살펴보고 여기서 일어나는 일을 볼 수 있습니다. –

+0

@RyanGregg 질문에 대한 편집에 헤더 정보가 포함되어 있습니다. –

+0

감사합니다. Adam. 나는/드라이브/경로에 대한 쿼리를 위해 nextLink가 반환되는 방법에 버그가 있다는 것을 확인할 수있었습니다./me/drive에 대한 쿼리는 정상적으로 작동합니다. 우리는 수정 작업을하고 있습니다. –

답변

0

당신은 넥스트 링크는 당신에게 다음 결과 집합을 반환 불투명 한 URL해야한다는 정확합니다. 해당 문자열의 형식은 시간이 지남에 따라 변경 될 수 있으므로 문자열을 구문 분석하거나 해석하지 말아야하지만 사용법은 동일해야합니다.

되돌아 오는 응답은 빈 결과와 일치합니다. 즉, 나열 할 추가 파일이 없음을 의미합니다.

얼마나 많은 결과가 ReallyBigFolder에 있습니까? top을 다른 값 (예 : 5-1000)으로 설정하면 어떻게됩니까?

@ odata.context는 결과를 설명하지만 반드시 요청 URL과 같을 수는 없습니다. nextlink에서 얻은 @ odata.context가 초기 요청에서 얻은 것과 다른가요? 그것은 같아야합니다 ...

+0

그 폴더에 450 개의 파일이 있습니다. PS 스크립트에서 루프의 파일 이름을 "터치"하여 테스트하기 위해 만들어 졌으므로 본질적으로 0 바이트 파일이지만 그 중 많은 수가 있습니다. 내가 top = 500이면 450 개의 파일을 모두 얻습니다. 내가 top = 5 일 경우, 5 개의 결과를 얻은 다음 nextLink를 따라 가려고합니다. 그러면 빈 세트가됩니다. nextLink 결과의 @ odata.context는 원래 쿼리 결과의 @ odata.context와 일치합니다. –

+0

"서버 쪽 페이징"과 "클라이언트 쪽 페이징"사이에는 약간의 혼란이 있습니다. 클라이언트 쪽 페이징은 클라이언트가 특정 범위의 페이지를 요청할 수있는 기능입니다. 예를 들어, top = 200은 처음 200 개의 결과를 얻습니다. top = 200 & skip = 200은 201-400의 결과를 얻습니다. 따라서 –

+0

을 사용하여 다음 200 개의 파일을 가져올 수 있어야합니다. URL : http://graph.microsoft.com/beta/drives/b!Gxxxxx-xxxxxxge/root:/ReallyBigFolder:/children? top = 200 & skip = 200. * 서버 *가 결과의 서브 세트를 리턴하기로 결정할 때 다음 링크가 사용됩니다. 나는 당신이 200 개의 레코드를 모두 가지고 있기 때문에 nextLink를 얻는 이유를 모르겠습니다 (top = 200); 일반적으로 요청 된 레코드 수 (예 : 첫 번째 100)보다 작 으면 리턴되며, 그 경우에는 nextlink가 나머지 100을 리턴합니다 (최대). 따라서 레코드를 리턴하지 않는 nextlink가 맞는지는 틀림 없습니다 , 그러나 그것은 전혀 포함되어있는 것이 이상합니다. 그게 도움이 되나요? –