본문 바로가기
프로그래밍 놀이터/Tips

[Facebook] 그래프 API ( Graph API ) Overview

by 돼지왕 왕돼지 2018. 2. 26.
반응형

[Facebook] 그래프 API ( Graph API ) Overview


https://developers.facebook.com/docs/graph-api/overview

https://developers.facebook.com/docs/graph-api/using-graph-api

90일 마이그레이션 정책, access token, All, API, api release, api version, center, chronological, component, CREATE, debug, debugging, Delete, DISTANCE, Edge, event, facebook, facebook-api-version, field, fields, Get, Graph API, graph api explorer, Group, header, ID, Info, invalid, Limit, locale, method=get, migration, Node, node 간의 연결, node 에 대한 정보, node 유형, node 정보, Order, Overview, Page, Place, placetopic, Post, pre-defined 오류, query, response, return_ssl_resources, reverse_chronological, since, Until, User, Warning, [Facebook] 그래프 API ( Graph API ) Overview, __debug__, ㅐ개변수, 검색, 공개 개체, 그래프 api, 그래프 api 탐색기, 노드, 다중 정보 요청, 댓글, 매개변수, 사용자, 사진, 삭제, 수정, 시간 기반 페이지 매김, 에지, 오프셋 기반 페이지 매김, 중첩 요청, 커서 기반 페이지 매김, 타임 스탬프, 페이지, 필드, 확장 api

-

노드, 에지, 필드 라는 component 로 구성된다.


노드 : 사용자, 사진, 페이지, 댓글 같은 항목

에지 : Node 간의 연결

필드 : Node 에 대한 정보



-

대부분의 그래프 API 요청에는 엑세스 토큰을 사용해야 한다.



-

각 Node 에는 고유한 ID 가 있고, Graph API 를 통해 해당 ID 를 접근하면 Node 에 대한 정보가 나온다.

노드 ID 구조나 형식은 변경 가능성이 높기 때문에 해당 form 을 fixed 된 것으로 가정하면 안 된다.



-

API 버전이 있다.

“핵심” API 는 릴리즈 후 최소 2년간 해당 버전에서 사용할 수 있고 수정되지 않는다.

핵심 API 외 모든 항목은 확장 API 이다. 확장 API 들은 플랫폼 로드맵에 발표되는 90일 마이그레이션 정책에 따라 언제든 수정하거나 삭제할 수 있다. ( 즉 확장 API 들은 플랫폼 로드맵에 의해 변경이 된다고 발표되면 필요에 따라 90일 이내에 수정해야 한다. )



-

그래프 API 를 이해하기 위해서는 “그래프 API 탐색기” 를 통하는 것이 좋은 방법이다.

https://developers.facebook.com/tools/explorer ( 일종의 API 호출 시뮬레이션을 통해 감을 잡는 것 )



-

기본적으로 노드나 에지를 검색할 때 해당 노드나 에지의 모든 필드가 반환되지 않는다.

fields 검색 매개변수를 사용하여 반환될 필드 또는 에지를 선택할 수 있다.


ex) https://graph.facebook.com/bgolub?fields=id,name,picture



-

정렬 가능한 필드는 order 정보를 추가해 정렬한 결과를 받을 수 있다.

order 는 “chronological”, “reverse_chronological” 둘 중 하나이다.


ex) graph.facebook.com/{photo-id}?fields=comments.order(reverse_chronological)



-

대부분은 ID 를 사용해 검색할 수 있으나, 특별히 URL 만을 사용해 식별해야 하는 경우도 있다.

( URL Node 참조 : https://developers.facebook.com/docs/graph-api/reference/v2.1/url )



-

return_ssl_resources(bool), locale(Locale) 등을 통해 받고 싶은 response 에 대한 추가정보를 전달 할 수 있다.



-

다음과 같이 중첩 요청을 만들 수도 있다.

limit 을 통해 갯수제한도 할 수 있다.

이를 통해 아주 복잡한 데이터를 한 query 로 받을 수도 있다.

graph.facebook.com/{node-id}?fields=<first-level>{<second-level>}

ex) graph.facebook.com/me?fields=albums.limit(5){name, photos.limit(2)},posts.limit(5)



-

노드 또는 에지에 API 요청을 할 때, 일반적으로 모든 결과를 한번에 받지 않는다.

일부 응답에는 수천 개의 개체를 포함할 수 있기 때문이다.

그래서 기본적으로 응답에 페이지가 매겨진다.

각각의 페이지는 새로운 항목의 Create, Delete 여부에 따라 대부분 Invalid 된다.


커서 기반의 페이지 매김

     가장 효율적인 방법이다. 커서는 데이터 리스트에서 특정 항목을 표시하는 임의의 문자열이다.

     항목이 삭제되지 않는 한 커서는 항상 리스트의 같은 부분을 가리키지만, 항목이 삭제되면 무효화된다.

     따라서 앱에서 기존 커서를 저장하거나 기존 커서가 여전히 유효하다고 가정하지 말아야 한다.


ex)

{

  "data": [

     ... Endpoint data is here

  ],

  "paging": {

    "cursors": {

      "after": "MTAxNTExOTQ1MjAwNzI5NDE=",

      "before": "NDMyNzQyODI3OTQw"

    },

    "previous": "https://graph.facebook.com/me/albums?limit=25&before=NDMyNzQyODI3OTQw"

    "next": "https://graph.facebook.com/me/albums?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE="

  }

}



시간 기반 페이지 매김

     특정 시간의 타임 스탬프를 사용하여 결과 데이터를 탐색하는 데 사용한다.

     일관된 결과를 얻으려면 since 와 until 매개변수를 모두 지정하는 것이 좋으며, 권장 시간 차는 최대 6개월.

     

ex)

{

  "data": [

     ... Endpoint data is here

  ],

  "paging": {

    "previous": "https://graph.facebook.com/me/feed?limit=25&since=1364849754",

    "next": "https://graph.facebook.com/me/feed?limit=25&until=1364587774"

  }

}



오프셋 기반 페이지 매김

     에지가 커서 또는 시간 기반 페이지 매김을 지원하지 않는 경우에만 사용해야 한다.

     새 개체가 추가되면 각 오프셋 기반 페이지의 콘텐츠가 변경된다.



-

매우 큰 매개변수를 취하는 API 의 경우, 원래 GET 요청이더라도 POST 요청으로 처리하고 method=GET 매개변수를 추가하면 된다.



-

다음과 같이 다중 정보 요청도 가능하다.

graph.facebook.com/photos?ids={user-id-a},{user-id-b}

ex) graph.facebook.com/?ids=platform,me



-

다음의 호출로 노드 유형을 미리 알지 못해도, 노드에 포함된 모든 정보를 볼 수 있다.

graph.facebook.com/{node-id}?metadata=1



-

다음을 통해 많은 공개 개체를 검색 할 수 있다.

graph.facebook.com/search?q={your-query}&type={object-type}


지원되는 검색 유형(type)은 아래와 같다.

     user, 사용자가 허용한 경우, 이름검색

     page, 이름 검색

     event, 이름 검색

     group, 이름 검색

     place, 이름, center, distance 검색

     placetopic, topic_filter 검색


ex) graph.facebook.com

  /search?

    q=coffee&

    type=place&

    center=37.76,-122.427&

    distance=1000



-

각종 pre-defined 된 오류코드들이 있다.



-

요청 시 debug=“value" 을 넣으면, 요청 시 문제사항이 "__debug__” key 를 통해 함께 전달된다.


value 는 all, info, warning 중 하나



-

헤더의 facebook-api-version 필드를 통해 요청을 처리한 API version 정보를 알 수 있다.

이는 response 에 대한 debugging 이나, 버전 없이 API 호출한 경우에 유용할 수 있다.




반응형

댓글