menu
Is this helpful?

# Restful API 사용 가이드

본 가이드에서는 데이터 수집 API에 대해 소개합니다. 데이터 수집 API를 사용하면, 수집 도구나 SDK에 의존하지 않고, HTTP의 POST 메소드를 사용하여 ThinkingEngine 플랫폼으로 직접 데이터를 수집할 수 있습니다.

업로드를 시작하기 전에, 데이터 규칙을 참조하고, TE의 데이터 형식과 데이터 규칙을 이해한 상태에서, 본 가이드의 안내에 따라 업로드를 진행해 주세요.

POST 메소드로 업로드되는 데이터는, TE의 데이터 규칙을 준수합니다.

# 1. 데이터 형식 변환

데이터를 업로드하기 전에, 데이터의 전송 포맷을 지정된 형식으로 변환해야 합니다. TE의 각 데이터는 JSON 형태로, 아래는 샘플입니다. (읽기 쉽게, 형식이 이미 정돈되어 있음)

{
  "#account_id": "ABCDEFG-123-abc",
  "#distinct_id": "F53A58ED-E5DA-4F18-B082-7E1228746E88",
  "#type": "track",
  "#ip": "192.168.171.111",
  "#time": "2017-12-18 14:37:28.527",
  "#event_name": "test",
  "properties": {
    "#lib": "LogBus",
    "#lib_version": "1.0.0",
    "#screen_height": 1920,
    "#screen_width": 1080,
    "argString": "abc",
    "argNum": 123,
    "argBool": true
  }
}

구체적인 데이터 형식의 규칙은, 데이터 규칙을 참고해 주세요.

# 2. 데이터 업로드

JSON 형식의 데이터 준비가 완료되면, 데이터를 업로드할 수 있는 상태가 됩니다. TE 시스템은 HTTP 표준의 POST 메소드 호출 요구를 지원합니다. 모든 인터페이스의 데이터 문자 인코딩은 UTF-8을 사용합니다. 구체적인 호출 방법은 다음과 같습니다.

# 2.1 데이터 수신 인터페이스 (커밋 방식은 form-data)

클라우드 서비스를 사용하고 있다면, 다음 URL을 입력해주세요.

https://te-receiver-naver.thinkingdata.kr/sync_data or

https://te-receiver-naver.thinkingdata.kr/sync_json

온프레미스 서비스를 사용하는 경우, 다음의 URL을 입력해주세요.

http://업로드 URL/sync_data or

http://업로드 URL/sync_json

# 2.1.1 수신 파라미터 (requestBody에 기입)

  • JSON 데이터의 경우:
    • 파라미터 1: appid=프로젝트의 APPID
    • 파라미터 2: data=JSON 데이터, UTF-8 인코딩, urlencode 인코딩 필요
    • 파라미터 3: client=0, 기본값은 0, 1을 설정할 때 데이터 전송 측 IP를 #ip로 강제 변경
  • 복수 데이터의 경우:
    • 파라미터 1: appid=프로젝트의 APPID
    • 파라미터 2: data_list=JSONArray 형식의 데이터, 복수의 JSON 데이터, UTF-8 인코딩, urlencode 인코딩 필요
    • 파라미터 3: client=0, 기본값은 0, 1을 설정할 때 데이터 전송 측 IP를 #ip로 강제 변경

주의: 다른 언어의 라이브러리는 urlencode를 지원할 수 있습니다. 이 경우, 다시 urlencode할 필요는 없습니다. 예를 들어, Python3의 requests 라이브러리, postman의 요청 테스트 등이 있습니다.

아래는 curl을 사용하여 RESTful API를 호출하는 방법을 보여줍니다.

{
"#account_id": "testing",
"#time": "2019-01-01 10:00:00.000",
"#type": "track",
"#event_name": "testing",
"properties": {
"test": "test"
}
}

위 데이터는 먼저 urlencode 처리가 필요합니다.

%7b%22%23account_id%22%3a%22testing%22%2c%22%23time%22%3a%222019-01-01+10%3a00%3a00.000%22%2c%22%23type%22%3a%22track%22%2c%22%23event_name%22%3a%22testing%22%2c%22properties%22%3a%7b%22test%22%3a%22test%22%7d%7d

파라미터를 추가하고 데이터를 업로드합니다.

curl "http://receiver:9080/sync_data" --data "appid=test-sdk-appid&data=%7b%22%23account_id%22%3a%22testing%22%2c%22%23time%22%3a%222019-01-01+10%3a00%3a00.000%22%2c%22%23type%22%3a%22track%22%2c%22%23event_name%22%3a%22testing%22%2c%22properties%22%3a%7b%22test%22%3a%22test%22%7d%7d"

# 2.1.2 반환 값 파라미터

반환 값 파라미터 code: 0을 받은 경우, 데이터 업로드는 성공입니다.

# 2.1.3 Debug 모드

파라미터를 업로드할 때, debug 파라미터를 추가할 수 있습니다. (즉, 3개의 업로드 파라미터, appid, data\data_list, debug가 있음) 추가는 선택적이며 기본값은 꺼짐입니다. 소량의 테스트 데이터를 업로드할 때만 디버그 모드를 켭니다. 운영 환경에서 디버그 모드를 켜지 마십시오. debug=1의 경우, 반환 값은 에러의 상세한 원인을 보여줍니다. 예를 들어:

{"code":-1,"msg":"#time 필드의 포맷이 잘못되어 [yyyy-MM-dd HH:mm:ss] 또는 [yyyy-MM-dd HH:mm:ss.SSS]를 전달해야 함"}

# 2.2 데이터 수신 인터페이스(커밋 방식은 raw)

클라우드 서비스를 사용하는 경우, 아래의 URL을 입력하세요:

http://ta-receiver.thinkingdata.io/sync_json

온프레미스 서비스를 사용하는 경우, 다음 URL을 입력하세요:

http://업로드 URL/sync_json

# 2.2.1 수신 파라미터 (requestBody에 기록)

  • json 데이터의 경우:
{
  "appid": "debug-appid",
  "debug": 0,
  "data": {
    "#type": "업로드",
    "#event_name": "test",
    "#time": "2019-11-15 11:35:53.648",
    "properties": { "a": "123", "b": 2 },
    "#distinct_id": "1111"
  }
}
  • 복수 데이터의 경우:
  [
  {
  "appid": "debug-appid",
  "debug": 0,
  "data": {
  "#type": "track",
  "#event_name": "test",
  "#time": "2019-11-15 11:35:53.648",
  "properties": { "a": "123", "b": 2 },
  "#distinct_id": "1111"
  },
  {
  "appid": "debug-appid",
  "debug": 0,
  "data": {
  "#type": "track",
  "#event_name": "test",
  "#time": "2019-11-15 11:35:53.648",
  "properties": { "a": "123", "b": 2 },
  "#distinct_id": "1111"
  }
  }
  }

# 2.2.2 반환 값 파라미터:

반환 값 파라미터 code: 0을 받은 경우, 데이터 업로드는 성공입니다.

# 2.2.3 Debug 모드

파라미터를 업로드할 때, debug 파라미터를 추가할 수 있습니다. (즉, JSON에 debug 파라미터를 추가). 추가는 선택적이며, 기본값은 꺼짐입니다. 소량의 테스트 데이터를 업로드할 때만 디버그를 켭니다.

운영 환경에서 디버그를 켜지 마십시오. debug=1의 경우, 반환 값은 에러의 상세한 원인을 보여줍니다.

{
  "code": -1,
  "msg": "#time 필드의 형식이 잘못되었습니다. [yyyy-MM-dd HH:mm:ss] 또는 [yyyy-MM-dd HH:mm:ss.SSS]가 필요합니다."
}

# 2.2.4 데이터 압축

RequestHeader에 압축 필드를 추가하여 압축 데이터를 업로드할 수 있습니다. 예를 들어: compress=gzip, 서버 측은 gzip을 사용하여 데이터를 압축 해제합니다. 현재 지원되는 압축 방식: gzip, lzo, lz4, snappy입니다. 기본적으로 압축하지 않습니다.

# 2.2.5 전송 측 IP 획득

RequestHeader에 client=1을 추가하면, 서버 측은 전송 IP를 #ip 필드에 기록합니다(강제 변경). 기본값은 0입니다.

# 3. 자주 묻는 질문

데이터 규칙을 참고하여, 데이터 포맷 문제로 인한 데이터 업로드 이상을 확인하십시오.