Вызов /me/contacts/{id}/photo не возвращает ETag

#microsoft-graph-api

#microsoft-graph-api

Вопрос:

Я вызываю me/contacts/{id}/photo , и ответы не соответствуют тому, что определено в документах.

Согласно документам, две вещи не соответствуют тому, что я вижу:

  1. Когда у контакта нет фотографии, в нем указывается, что вы получите пустой json paylod, однако я получаю 404 ответ с этой ошибкой

     Code: ErrorItemNotFound
    Message: The specified object was not found in the store.
      
  2. Когда для контакта есть фотография, в статье говорится, что будет @odata.mediaEtag , однако в полезной нагрузке, которую я получаю обратно, ее нет. Ниже мой ответ:

     (*map[string]interface {})(0xc42014a028)((len=5) {
     (string) (len=6) "height": (float64) 360,
     (string) (len=5) "width": (float64) 360,
     (string) (len=14) "@odata.context": (string) (len=243) "https://graph.microsoft.com/v1.0/$metadata#users('REDACTED')/contacts('REDACTED')/photo/$entity",
     (string) (len=23) "@odata.mediaContentType": (string) (len=10) "image/jpeg",
     (string) (len=2) "id": (string) (len=7) "360X360"
    })
      

Проблема № 1 не влияет на меня, поскольку я могу легко справиться с 404 . Меня больше беспокоит проблема № 2, поскольку я хотел бы etag , чтобы я мог отслеживать, было ли изменено изображение, и загружать его только тогда, когда оно было изменено.

Я смог настроить OAuth, запустить API-интерфейсы и успешно загрузить контакты и фотографии, следуя документам, поэтому я не уверен, чего мне не хватает.

Ответ №1:

Разные конечные точки могут возвращать немного разные данные (например /me/photo , vs /me/{id}/photo vs /groups/{id}/photo ). Единственные свойства, в которых вы можете быть уверены, будут указаны в profilePhoto resoruce:

 {
  "id": "240X240",
  "height": 240,
  "width": 240
}
  

Возможно, вы сможете использовать eTag для самого contact себя (изменение фотографии контакта в Outlook должно отображаться как изменение контакта), используя /me/contacts/{id}?$select=id,lastModifiedDateTime :

 {
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('{id}')/contacts(id,lastModifiedDateTime)/$entity",
    "@odata.etag": "W/"EQAAABYAAAAiIsqMbYjsT5e/T7KzowPTAAAYc8Bf"",
    "id": "{id}",
    "lastModifiedDateTime": "2017-09-04T15:54:02Z"
}