잡동사니
페이스북 RestAPI 구조 분석 본문
RestAPI를 사용하는 회사중 유명한 페이스북의 RestAPI의 구조를 확인해보려고 합니다.
페이스북 개발자 페이지에서 API를 확인하고 API 탐색기로 요청해봤습니다.
공통 특성
- Access token을 Request param으로 받음
API의 구조는 다음과 같음
- GET /[버전]/[Node]/[Edge]
- GET /[버전]/[Object id]/feed
- 예)
curl -i -X GET \ "https://graph.facebook.com/v4.0/{canvas-id} ?access_token=your-access-token" HTTP/1.1
Object id의 종류를 다양하게 받음
Feed
curl -i -X GET \ "https://graph.facebook.com/v4.0/{your-user-id}/feed
?access_token=your-access-token" HTTP/1.1
Friends
curl -i -X GET \ "https://graph.facebook.com/v4.0/{your-user-id}/friends
?access_token=your-access-token" HTTP/1.1
Canvas
curl -i -X GET \ "https://graph.facebook.com/v4.0/{canvas-id}
?access_token=your-access-token" HTTP/1.1
Album
curl -i -X GET \ "https://graph.facebook.com/v4.0/{album-id}
?access_token=your-access-token" HTTP/1.1
...
동일한 URI 형식에 다양한 Object id를 사용하면 서비스 구분은 어떻게 하나?
예) URI의 요청이 Canvas인지 Album인지 어떻게 판단하나?
내가 URI를 만들었다면 다음과 같이 만들었을 것이다.
Canvas
curl -i -X GET \ "https://graph.facebook.com/v4.0/canvas/{canvas-id}
?access_token=your-access-token" HTTP/1.1
Album
curl -i -X GET \ "https://graph.facebook.com/v4.0/album/{album-id}
?access_token=your-access-token" HTTP/1.1
페이스북은 피드 데이터를 그래프 DB를 활용하여 데이터를 구성하는걸로 알고 있는데 그 부분이 API 구조에 영향을 미친것은 아닌가하는 의구심이 든다.
Field를 선택할 수 있음
curl -i -X GET \ "https://graph.facebook.com/{your-user-id}
?fields=birthday,email,hometown
&access_token={your-user-access-token}" HTTP/1.1
페이징 제공
페이징을 하고 싶은 수를 요청하면 이전/이후 데이터를 URI로 제공
요청
curl -i -X GET \ "https://graph.facebook.com/{your-user-id}
?fields=feed.limit(3)
&access_token={your-access-token}" HTTP/1.1
응답 (시간 기반)
{
"feed": {
"data": [
{
"created_time": "2017-12-12T01:24:21+0000",
"message": "This picture of my grandson with Santa",
"id": "{your-user-id}_1809387339093972" // Post ID
},
{
"created_time": "2017-12-11T23:40:17+0000",
"message": ":)",
"id": "{your-user-id}_1809316002434439" // Post ID
},
{
"created_time": "2017-12-11T23:31:38+0000",
"message": "Thought you might enjoy this.",
"id": "{your-user-id}_1809310929101613" // Post ID
}
],
"paging": {
"previous": "https://graph.facebook.com/v3.2/{your-user-id}/feed?format=json&limit=3&since=1542820440&access_token={your-user-access-token}&__paging_token=enc_AdCgj6RSGWTYV7EXj2cFlOWJjbZCq8oI3ogIpLrxPCVK3U8Kad0EgsZA2vri3YKIwl71XGRDJz9C8TgqMeyiu8U5CD&__previous=1",
"next": "https://graph.facebook.com/v3.2/{your-user-id}/feed?format=json&limit=3&access_token={your-user-access-token}&until=1542583212&__paging_token=enc_AdDLmzUgWiLo6oHGCI53S5begiKOfNZBY0affrLMWgheBzfwMA7XSKmgjyNbuZBIptdXc18j1Se0Dm7vEsePh1SoM3"
}
},
"id": "{your-user-id}"
}
응답 (커서 기반)
{
"data": [
... Endpoint data is here
],
"paging": {
"cursors": {
"after": "MTAxNTExOTQ1MjAwNzI5NDE=",
"before": "NDMyNzQyODI3OTQw"
},
"previous": "https://graph.facebook.com/{your-user-id}/albums?limit=25&before=NDMyNzQyODI3OTQw"
"next": "https://graph.facebook.com/{your-user-id}/albums?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE="
}
}
응답 (오프셋 기반)
{
"data": [
... Endpoint data is here
],
"paging": {
"previous": "https://graph.facebook.com/{your-user-id}/feed?limit=25&offset=76",
"next": "https://graph.facebook.com/{your-user-id}/feed?limit=25&offset=126"
}
}
응답 데이터 형식
Post
{
"id": "{your-page-id}_1810399758992730" // Post ID
}
Put
{
"success": true
}
Delete
{
"success": true
}
오류 처리
오류 결과
{
"error": {
"message": "Message describing the error",
"type": "OAuthException",
"code": 190,
"error_subcode": 460,
"error_user_title": "A title",
"error_user_msg": "A message",
"fbtrace_id": "EJplcsCHuLu"
}
}
오류 코드
권한 오류 코드
느낀점
페이스북에서 제공하는 API는 크게 두가지 형태인거 같습니다.
- 사용자를 기반으로 데이터를 조회
- 특정 데이터의 상세조회
사용자를 기반으로 데이터 목록을 확인하고 선택한 데이터의 상세 정보를 보기 편한 구조로 API를 제공하는거 같습니다.
'IT' 카테고리의 다른 글
M-JPEG에 대해서 알아보자 (2) | 2020.07.17 |
---|---|
Duplicate Targetframework attribute (0) | 2020.05.22 |
Markdown, 생산성의 증가 (0) | 2019.09.06 |
AWS 캠페인 워크샵 / 분석 및 데이터 아키텍처 현대화 특집 (0) | 2019.09.06 |
[면접 후기] NHN Entertainment(NHN엔터테인먼트) 1차면접(실무면접) 리뷰 (12) | 2019.06.04 |
Comments