๋ฉ”์ธ ์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿ“˜ Opensurvey API V3 ์ „ํ™˜ ์•ˆ๋‚ด (Changelog)

์˜ค๋Š˜ ์—…๋ฐ์ดํŠธํ•จ

๐Ÿงจ ์ฃผ์š” Breaking Change

์„ค๋ฌธ ๋ชฉ๋ก ์กฐํšŒ API

Endpoint: /v1/surveys โ†’ /v3/surveys

๋ถ„๋ฅ˜

ํ•ญ๋ชฉ

V1ยทV2

V3

๋ณ€๊ฒฝ

์š”์ฒญ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…

collectGroupsStatus

collectGroupStatus

nextSurveyId

offset

๋ฐ˜ํ™˜ ํ•„๋“œ ์ด๋ฆ„ ๋ฐ ํ˜•์‹

surveys
โ”” title

surveys
โ”” label

nextSurveyId

offset

์ถ”๊ฐ€

์š”์ฒญ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…

(๊ธฐ๋ณธ: ํ•œ ๋ฒˆ์— ์กฐํšŒํ•˜๋Š” ๊ฐœ์ˆ˜ 1000)

size

ํ•œ ๋ฒˆ์— ์กฐํšŒํ•  ๊ฐœ์ˆ˜ (๋ณ„๋„๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด 100, ์ตœ๋Œ€ 100)


์„ค๋ฌธ ์ •๋ณด ์กฐํšŒ API

Endpoint: /v1/surveys/{surveyId} โ†’ /v3/surveys/{surveyId}

๋ถ„๋ฅ˜

ํ•ญ๋ชฉ

V1ยทV2

V3

๋ณ€๊ฒฝ

๋ฐ˜ํ™˜ ํ•„๋“œ ์ด๋ฆ„ ๋ฐ ํ˜•์‹

title

label

questions:

"questions": [
{
"rank": 1,
"type": "SingleChoice",
"text": "<p>๊ฑฐ์ฃผํ•˜์‹œ๋Š” ์ง‘์˜ ํ˜•ํƒœ๋Š” ๋‹ค์Œ ์ค‘ ์–ด๋””์— ํ•ด๋‹นํ•˜๋‚˜์š”?</p>",
"options": [
{
"rank": 1,
"text": "<p>1๋ฒˆ ๋ณด๊ธฐ</p>"
}
]
}
]

questions:

"questions": [
{
"name": "Q1",
"type": "SingleChoice",
"label": "<p>๊ฑฐ์ฃผํ•˜์‹œ๋Š” ์ง‘์˜ ํ˜•ํƒœ๋Š” ๋‹ค์Œ ์ค‘ ์–ด๋””์— ํ•ด๋‹นํ•˜๋‚˜์š”?</p>",
"options": [
{
"name": "1",
"label": "<p>1๋ฒˆ ๋ณด๊ธฐ</p>"
}
]
}
]

parameters:

"parameters": [
{
"parameterKey": "UID",
"isCollectable": true
}
]

embeddedData:

"embeddedData": [
{
"name": "parameter_UID",
"label": "์‘๋‹ต์ž ๊ณ ์œ  ์‹๋ณ„ํ‚ค"
}
]

์ถ”๊ฐ€

๋ฐ˜ํ™˜ ํ•„๋“œ ์ด๋ฆ„ ๋ฐ ํ˜•์‹

-

blocks:

"blocks": [
{
"name": "B1",
"label": "์ƒˆ ๋ธ”๋ก",
"questions": [
"Q1",
"Q2",
"Q3"
]
}
]

-

collectGroups:

"collectGroups": [
{
"collectGroupId": "a01h94kt4fyzmp64h40gzyvrjj7",
"label": "๊ธฐ๋ณธ ๋งํฌ ์ˆ˜์ง‘๊ทธ๋ฃน",
"state": "READY"
}
]

์ˆ˜์ง‘๊ทธ๋ฃน ๋ชฉ๋ก ์กฐํšŒ API

Endpoint: /v1/surveys/{surveyId}/collect-groups โ†’ /v3/surveys/{surveyId}/collect-groups

๋ถ„๋ฅ˜

ํ•ญ๋ชฉ

V1ยทV2

V3

๋ณ€๊ฒฝ

๋ฐ˜ํ™˜ ํ•„๋“œ ์ด๋ฆ„ ๋ฐ ํ˜•์‹

name

label

์ œ๊ฑฐ

๋ฐ˜ํ™˜ ํ•„๋“œ ์ด๋ฆ„

targetCnt

(์ˆ˜์ง‘๊ทธ๋ฃน ์ •๋ณด ์กฐํšŒ API์—๋Š” ๊ณ„์† ์กด์žฌ)

startedAt

(์ˆ˜์ง‘๊ทธ๋ฃน ์ •๋ณด ์กฐํšŒ API์—๋Š” ๊ณ„์† ์กด์žฌ)

completedAt

(์ˆ˜์ง‘๊ทธ๋ฃน ์ •๋ณด ์กฐํšŒ API์—๋Š” ๊ณ„์† ์กด์žฌ)

createdAt

(์ˆ˜์ง‘๊ทธ๋ฃน ์ •๋ณด ์กฐํšŒ API์—๋Š” ๊ณ„์† ์กด์žฌ)

updatedAt

(์ˆ˜์ง‘๊ทธ๋ฃน ์ •๋ณด ์กฐํšŒ API์—๋Š” ๊ณ„์† ์กด์žฌ)


์ˆ˜์ง‘๊ทธ๋ฃน ์ •๋ณด ์กฐํšŒ API

Endpoint: /v1/collect-groups/{collectGroupId} โ†’ /v3/collect-groups/{collectGroupId}

๋ถ„๋ฅ˜

ํ•ญ๋ชฉ

V1ยทV2

V3

๋ณ€๊ฒฝ

๋ฐ˜ํ™˜ ํ•„๋“œ ์ด๋ฆ„ ๋ฐ ํ˜•์‹

name

label

์ถ”๊ฐ€

๋ฐ˜ํ™˜ ํ•„๋“œ ์ด๋ฆ„ ๋ฐ ํ˜•์‹

-

links:

"links": [
"https://ds.fdback.me/r/aLLfXrjhIrTwt"
]

์‘๋‹ต URL ์กฐํšŒ API

Endpoint: /v1/collect-groups/{collectGroupId}/answer-urls โ†’ ์ œ๊ฑฐ

HMAC์„ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๊ฒฝ์šฐ, ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜์ง‘ ์‹œ HMAC ์„œ๋ช… ์ ์šฉ ๊ฐ€์ด๋“œ ๋ฌธ์„œ์— ๋”ฐ๋ผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด ์ฃผ์„ธ์š”.


์ˆ˜์ง‘๊ทธ๋ฃน serial ๊ฐ’ ์กฐํšŒ API

Endpoint: /v1/collect-groups/{collectGroupId}/serial โ†’ ์ œ๊ฑฐ

์ˆ˜์ง‘๊ทธ๋ฃน ์ •๋ณด ์กฐํšŒ API์— ์ถ”๊ฐ€๋œ links ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ฃผ์„ธ์š”.


์‘๋‹ต ์กฐํšŒ API

Endpoint: /v1/responses โ†’ /v3/surveys/{surveyId}/responses

๋ถ„๋ฅ˜

ํ•ญ๋ชฉ

V1ยทV2

V3

๋ณ€๊ฒฝ

์š”์ฒญ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…

pageToken

offset

๋ฐ˜ํ™˜ ํ•„๋“œ ์ด๋ฆ„ ๋ฐ ํ˜•์‹

pageToken

offset

responses

answers:

"answers": [
{
"name": "Q1",
"answer": [
{
"num": 6,
"str": "์ฃผ๊ด€์‹ ๋‹ต๋ณ€์ž…๋‹ˆ๋‹ค."
}
]
}
]

responses

variables:

"variables": [
{
"name": "Q1",
"type": "MULTI_SELECT",
"label": "<p>์ข‹์•„ํ•˜๋Š” ๊ฒƒ์€?</p>",
"options": [
{
"value": "1",
"valueLabel": "<p>1๋ฒˆ ๋ณด๊ธฐ</p>"
},
{
"value": "2",
"valueLabel": "<p>๊ธฐํƒ€(์ง์ ‘ ์ž…๋ ฅ)</p>"
}
],
"answer": [
{
"value": "2",
"etcValue": "๊ธฐํƒ€ ์‘๋‹ต์ž…๋‹ˆ๋‹ค."
}
]
}
]

์ œ๊ฑฐ

์š”์ฒญ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…

surveyId

(Endpoint๋กœ ์ด๋™)

์ถ”๊ฐ€

์š”์ฒญ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…

(๊ธฐ๋ณธ: ํ•œ ๋ฒˆ์— ์กฐํšŒํ•˜๋Š” ๊ฐœ์ˆ˜ 1000)

size

ํ•œ ๋ฒˆ์— ์กฐํšŒํ•  ๊ฐœ์ˆ˜ (๋ณ„๋„๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด 1000, ์ตœ๋Œ€ 1000)

-

variables

-

embeddedData

๋ฐ˜ํ™˜ ํ•„๋“œ ์ด๋ฆ„ ๋ฐ ํ˜•์‹

-

responses

โ”” parameterUid

-

responses

โ”” responseId

-

responses

โ”” completedStatus

-

responses

โ”” embeddedData:

"embeddedData": [
{
"name": "parameter_UID",
"value": "xch123",
"valueLabel": "์‘๋‹ต์ž ๊ณ ์œ  ์‹๋ณ„ํ‚ค"
}
]

์‘๋‹ต ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์กฐํšŒ API

Endpoint: /v1/answer-sheets โ†’ /v3/surveys/{surveyId}/responses-meta

๋ถ„๋ฅ˜

ํ•ญ๋ชฉ

V1ยทV2

V3

๋ณ€๊ฒฝ

์š”์ฒญ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…

pageToken

offset

๋ฐ˜ํ™˜ ํ•„๋“œ ์ด๋ฆ„ ๋ฐ ํ˜•์‹

pageToken

offset

answerSheets

โ”” answerUid

responses

โ”” parameterUid

์ œ๊ฑฐ

์š”์ฒญ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…

surveyId

(Endpoint๋กœ ์ด๋™)

์ถ”๊ฐ€

์š”์ฒญ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…

(๊ธฐ๋ณธ: ํ•œ ๋ฒˆ์— ์กฐํšŒํ•˜๋Š” ๊ฐœ์ˆ˜ 1000)

size

ํ•œ ๋ฒˆ์— ์กฐํšŒํ•  ๊ฐœ์ˆ˜ (๋ณ„๋„๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด 1000, ์ตœ๋Œ€ 1000)

๋ฐ˜ํ™˜ ํ•„๋“œ ์ด๋ฆ„ ๋ฐ ํ˜•์‹

-

responses

โ”” responseId

-

responses

โ”” completedStatus

๋‹ต๋ณ€์ด ๋„์›€๋˜์—ˆ๋‚˜์š”?