Bottle Note API ๋ฌธ์
- 1. ๊ฐ์ (overview)
- 2. ๊ณตํต (common) API
- 3. ๊ถํ (auth) ๊ด๋ จ API
- 4. ํ์ (user) ๊ด๋ จ API
- 4.1. ๋ก๊ทธ์ธ
- 4.2. ๋ฒ ์ด์ง ํ์๊ฐ์
- 4.3. ๋ฒ ์ด์ง ๋ก๊ทธ์ธ
- 4.4. ํ ํฐ ์ฌ๋ฐ๊ธ
- 4.5. ๋๋ค์ ๋ณ๊ฒฝ
- 4.6. ํ๋กํ ๋ณ๊ฒฝ
- 4.7. ํ์ฌ ๋ก๊ทธ์ธ ์ฌ์ฉ์ ๋ฉํ ์ ๋ณด ์กฐํ
- 4.8. ํ์ ํํด
- 4.9. ํ์ ๋ณต๊ตฌ
- 4.10. ๋ง์ดํ์ด์ง ๊ธฐ๋ณธ์ ๋ณด ์กฐํ
- 4.11. ๋ฆฌ๋ทฐ ๋ง์ด๋ณดํ ์กฐํ
- 4.12. ๋ณ์ ๋ง์ด๋ณดํ ์กฐํ
- 4.13. ์ฐ ๋ง์ด๋ณดํ ์กฐํ
- 4.14. ์ฌ์ฉ์ ๋๋ฐ์ด์ค ํ ํฐ ์ ์ฅ
- 5. ๋ฐฐ๋ (banner) ๊ด๋ จ API
- 6. ๋๋ฌ๋ณด๊ธฐ (explore) ๊ด๋ จ API
- 7. ์ (alcohol) ๊ด๋ จ API
- 7.1. ์ (์์คํค) ๋ชฉ๋ก ์กฐํ
- 7.2. ์ (์์คํค) ์์ธ ์กฐํ
- 7.3. ์ (์์คํค) ์ฐํ๊ธฐ /์ฐํ๊ธฐ ํด์
- 7.4. ์ง์ญ(๋ฆฌ์ ) ์ ๋ณด ์กฐํ
- 7.5. ์นดํ ๊ณ ๋ฆฌ ๋ชฉ๋ก ์กฐํ
- 7.6. ํ๋ ์ด์ ํค์๋ ์กฐํ
- 7.7. ํ๋ ์ด์ ์์คํค ๋ชฉ๋ก ์กฐํ
- 7.8. ์ฃผ๊ฐ ์ธ๊ธฐ ์์คํค ์กฐํ
- 7.9. ๋ด ์์ฆ ์ธ๊ธฐ ์์คํค ์กฐํ
- 7.10. ์ฃผ๊ฐ ์กฐํ์ ๊ธฐ๋ฐ ์ธ๊ธฐ ์์คํค ์กฐํ
- 7.11. ์๊ฐ ์กฐํ์ ๊ธฐ๋ฐ ์ธ๊ธฐ ์์คํค ์กฐํ
- 7.12. ํ ์ด์คํ ํ๊ทธ ์ถ์ถ
- 8. ๋ฆฌ๋ทฐ (review) ๊ด๋ จ API
- 9. ๋ฆฌ๋ทฐ ๋๊ธ (review reply) ๊ด๋ จ API
- 10. ์ง์ (support) ๊ด๋ จ API
- 10.1. ์ฌ์ฉ์ ์ฐจ๋จ
- 10.2. ์ฐจ๋จ ํด์
- 10.3. ์ฐจ๋จ ๋ชฉ๋ก ์กฐํ
- 10.4. ์ฐจ๋จ ์ฌ์ฉ์ ID ๋ชฉ๋ก ์กฐํ
- 10.5. ์ฐจ๋จ ์ฌ๋ถ ํ์ธ
- 10.6. ์ํธ ์ฐจ๋จ ์ฌ๋ถ ํ์ธ
- 10.7. ๋๋ฅผ ์ฐจ๋จํ ์ฌ์ฉ์ ์
- 10.8. ๋ด๊ฐ ์ฐจ๋จํ ์ฌ์ฉ์ ์
- 10.9. ์๋ฌ ์ฝ๋
- 10.10. ์ ์ ์ ๊ณ ์์ฒญ
- 10.11. ๋ฌธ์ ๊ด๋ฆฌ (help)
- 10.12. ๋น์ฆ๋์ค ๊ด๋ฆฌ (business)
- 11. ํ๋ก์ฐ (follow) ๊ด๋ จ API
- 12. ๋ณ์ (rating) ๊ด๋ จ API
- 13. ํ์คํ ๋ฆฌ(user history) ๊ด๋ จ API
1. ๊ฐ์ (overview)
|
ํด๋น ํ๋ก์ ํธ API๋ฌธ์๋ ๊ฐ๋ฐํ๊ฒฝ๊น์ง ๋
ธ์ถ๋๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. |
1.2. ์๋ตํ์
ํ๋ก์ ํธ๋ ๋ค์๊ณผ ๊ฐ์ ์๋ตํ์์ ์ ๊ณตํฉ๋๋ค.
์์ฒญ ๊ฒฐ๊ณผ
| ์์ฒญ์ด ์ฑ๊ณตํ ๊ฒฝ์ฐ ( "success" : true ) | ์์ฒญ์ด ์คํจํ ๊ฒฝ์ฐ( "success" : false ) |
|---|---|
|
|
-
๊ธฐ๋ณธ์ ์ผ๋ก success , code , data , errors , meta ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
-
success : ์์ฒญ ์ฑ๊ณต ์ฌ๋ถ
-
code : ์์ฒญ ๊ฒฐ๊ณผ ์ฝ๋ (http status code ์ ๋์ผํฉ๋๋ค.)
-
data : ์์ฒญ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ( success๊ฐ true์ธ ๊ฒฝ์ฐ )
-
errors : ์์ฒญ ๊ฒฐ๊ณผ ์๋ฌ ( success๊ฐ false์ธ ๊ฒฝ์ฐ )
-
meta : ์์ฒญ ๊ฒฐ๊ณผ ๋ฉํ์ ๋ณด ( ์๋ฒ ์๋ต ์ ๋ณด, ๊ธฐ์กด ๊ฒ์ ์ ๋ณด , page ์ ๋ณด ๋ฑ)
-
-
๋๋ฝ๋ ์ ๋ณด๋ ์๋ฒ ๋ฐฑ์๋ ํ์๊ฒ ๋ฌธ์ํด์ฃผ์ธ์.
1.3. ๊ณตํต ์์ธ ์ฒ๋ฆฌ
๊ณตํต์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ ์์ธ๋ฅผ ์ ๋ฆฌํ๋ ๋ด์ฉ์ ๋๋ค.
success ์ฝ๋๊ฐ false์ธ ๊ฒฝ์ฐ errors ๊ฐ์ ํ์ธ ๋ฐ๋๋๋ค.
๊ณตํต์ ์ธ ์์ธ์ ์ข ๋ฅ์๋ ์ด๋ฐ ๊ฐ๋ค์ด ์์ต๋๋ค.
-
์ซ์ ๊ฐ์ด ํ์ํ๋ฐ ๋ฌธ์์ด ๊ฐ์ด ๋ค์ด์จ ๊ฒฝ์ฐ
POST http://localhost:8080/api/v1/reports/user
Content-Type: application/json
{
"userId": "์ผ", // ์ซ์ ๊ฐ์ด ํ์ํ๋ฐ ๋ฌธ์์ด ๊ฐ์ด ๋ค์ด์จ ๊ฒฝ์ฐ
"reportUserId": 0,
"type": "SPAM",
"content": "๋ด์ฉ"
}
{
"success": false,
"code": 400,
"data": [],
"errors": {
"message": "'userId' ํ๋์ ๊ฐ์ด ์๋ชป๋์์ต๋๋ค. ํด๋น ํ๋์ ๊ฐ์ ํ์
์ ํ์ธํด์ฃผ์ธ์."
},
"meta": {
"serverVersion": "1.0.0",
"serverEncoding": "UTF-8",
"serverResponseTime": "2024-04-19T22:28:52.428425",
"serverPathVersion": "v1"
}
}
-
ํ์์ ์ธ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ
POST http://localhost:8080/api/v1/reports/user
Content-Type: application/json
{
"userId": "", // ํ์์ ์ธ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ
"reportUserId": 0,
"type": "SPAM",
"content": "๋ด์ฉ"
}
{
"success": false,
"code": 400,
"data": [],
"errors": {
"userId": "์ ๊ณ ์ ์์ด๋๋ ํ์์
๋๋ค."
},
"meta": {
"serverVersion": "1.0.0",
"serverEncoding": "UTF-8",
"serverResponseTime": "2024-04-19T22:31:48.742731",
"serverPathVersion": "v1"
}
}
-
๋๋ฝ๋ ์ ๋ณด๋ ์๋ฒ ๋ฐฑ์๋ ํ์๊ฒ ๋ฌธ์ํด์ฃผ์ธ์.
-
์ถ๊ฐ๋์์ผ๋ฉด ์ข์ ์ ๋ณด๊ฐ ์์ผ๋ฉด ์๋ฒ ๋ฐฑ์๋ ํ์๊ฒ ๋ฌธ์ํด์ฃผ์ธ์.
1.4. ๊ณตํต ์ธ์ฆ/์ธ๊ฐ
๋ณดํ๋ ธํธ ์๋น์ค์์๋ ์ธ์ฆ์ด ํ์ํ URL์ ์ ๊ทผํ๊ธฐ ์ํด์๋ Authorization ํค๋์ ๋ก๊ทธ์ธ ์ ๋ฐ๊ธ๋ฐ์ Access Token์ ์ฒจ๋ถํด์ ์์ฒญ์ ๋ณด๋ด์ผ ํฉ๋๋ค.
์๋ ์์๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ์ง ์์ ๊ฒฝ์ฐ๋ Authorization ํค๋์ ์ฒจ๋ถํ ํ ํฐ์ ๋ฐ๋ผ ๋ฐ์ํ ์ ์๋ ์์ธ์ ์์์ ๋๋ค.
-
Authorization ํค๋์ ์ก์ธ์ค ํ ํฐ์ ์ฒจ๋ถํ์ง ์์ผ๋ฉด
ํ ํฐ์ด ์กด์ฌํ์ง ์์ต๋๋ค์๋ฌ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค (400) -
Authorization ํค๋์ ์ฒจ๋ถํ ํ ํฐ์ด ์๋ชป ๋ ํ ํฐ์ด๋ฉด
์๋ชป๋ ํ ํฐ์ ๋๋ค๋ผ๋ ์๋ฌ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค (401) -
Authorizatioin ํค๋์ ์ฒจ๋ถํ ํ ํฐ์ด ๋ง๋ฃ ๋ ํ ํฐ์ด๋ฉด
๋ง๋ฃ๋ ํ ํฐ์ ๋๋ค๋ผ๋ ์๋ฌ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค (403)
2. ๊ณตํต (common) API
2.1. ์ด๋ฏธ์ง ์ ๋ก๋ ๊ฒฝ๋ก ์์ฒญ
์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ ํ๊ธฐ ์ํ ์ ๋ก๋ ๊ฒฝ๋ก๋ฅผ ์์ฒญํฉ๋๋ค.
์ด๋ฏธ์ง ์ ๋ก๋๋ ์ธ์ฆ๋ ์ ์ ๋ง ์์ฒญ ๊ฐ๋ฅํฉ๋๋ค.
์ ๋ก๋ ์์๋ S3๋ฅผ ๋์์ผ๋ก ์งํํฉ๋๋ค.
์กฐํ ์์๋ CDN ์๋น์ค๋ฅผ ํตํด ์ด๋ฏธ์ง๋ฅผ ์ ๊ณตํฉ๋๋ค.
์์ฒญ ํ๋ผ๋ฏธํฐ
GET /api/v1/s3/presign-url?rootPath=images&uploadSize=1&contentType=image%2Fjpeg HTTP/1.1
Host: api.bottle-note.com
| Parameter | Description |
|---|---|
|
์ ๋ก๋ ํ์ผ ๊ฒฝ๋ก (ํ๋จ ์ค๋ช ์ฐธ์กฐ) |
|
์ ๋ก๋ํ ์ด๋ฏธ์ง์ ์ฌ์ด์ฆ ( ์ด๋ฏธ์ง๋น 1๊ฐ ) |
|
์ ๋ก๋ ํ์ผ์ Content-Type. ํ์ฉ ๋ชฉ๋ก: image/jpeg, image/png, image/webp, image/gif, image/svg+xml, video/mp4, application/pdf. ์ ๋ก๋(PUT) ์์ฒญ ์ ๋์ผํ Content-Type ํค๋๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค. |
-
rootPath : ๋ฃจํธ ๊ฒฝ๋ก๋ก ๋ถํฐ ์ด๋ฏธ์ง ์ ์ฅ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค
-
rootPath๊ฐreview์ผ ๊ฒฝ์ฐreview/๋ก ์์ํ๋ ๊ฒฝ๋ก๋ก ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋ฉ๋๋ค.-
rootPath๊ฐreview์ผ ๊ฒฝ์ฐ ์๋ฒ ์์๋ ํด๋น ์ ๋ก๋์ผ๊ณผ ๋๋คํ UUID๋ฅผ ํ ๋นํ ๊ฒฝ๋ก๋ฅผ ์์ฑํฉ๋๋ค.-
ex.
review/20210101/random-uuid.jpg/user/profile/20210101/random-uuid.jpg
-
-
์ด๋ ์ด๋ฏธ์ง์ ์๋ณธ๋ช ์ ํ์ ์์ต๋๋ค.(ํ์ฌ๋ก์๋)
-
-
rootPath๋ ํ๋์ ๋๋ ํ ๋ฆฌ๋ผ๊ณ ์๊ฐํ๊ณ ์ผ๊ด๋ ์์๋ก ํ๋ก ํธ ์์ญ์์ ๊ด๋ฆฌํฉ๋๋ค .-
ex)
review,user/profile,user/album,product๋ฑ
-
-
๋ฌธ์์ด
rootPath์ ์์๊ณผ ๋์/์ ๋ฌด์ ๋ฉ๋๋ค.
-
-
์ต์ ํ ๋๋ ํ ๋ฆฌ ์ด์์
rootPath๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค. -
uploadSize๋ ์ ๋ก๋ํ ์ฌ์ง์ ํฌ๊ธฐ๋งํผ ์์ฒญํฉ๋๋ค.-
uploadSize๋ ์ต๋ 10์ฅ ๊น์ง ๊ฐ๋ฅํฉ๋๋ค.
-
-
uploadSizeํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌํ์ง ์์ ๊ฒฝ์ฐ1์ฅ์ด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค.
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
๋ฒํท ์ด๋ฆ |
|
|
์ ๋ก๋ ํ์ผ ์ฌ์ด์ฆ |
|
|
์ ๋ก๋ URL ๋ง๋ฃ ์๊ฐ(๋ถ๋จ์) |
|
|
์ด๋ฏธ์ง ์ ๋ก๋ ์์ |
|
|
์ด๋ฏธ์ง ์กฐํ URL |
|
|
์ด๋ฏธ์ง ์ ๋ก๋ URL |
{
"success" : true,
"code" : 200,
"data" : {
"bucketName" : "image-bucket",
"uploadSize" : 1,
"expiryTime" : 5,
"imageUploadInfo" : [ {
"order" : 1,
"viewUrl" : "https://d1d1d1d1.cloudfront.net/images/1",
"uploadUrl" : "https://bottlenote.s3.ap-northeast-2.amazonaws.com/images/1"
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 12, 342901447 ],
"serverPathVersion" : "v1"
}
}
-
uploadUrl๋ฅผ ์ด์ฉํด ์ด๋ฏธ์ง๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ ๋ก๋ ํorder์viewUrl๋ ์๋ฒ๋ก ์ ๋ฌ์ด ํ์ํฉ๋๋ค.-
์๋ฅผ ๋ค์ด ๋ฆฌ๋ทฐ ๋ฑ๋ก์ ์ด๋ฏธ์ง ์ ๋ก๋ ์ฒ๋ฆฌ ํ ๋ฆฌ๋ทฐ ๋ฑ๋ก ์์ฒญ์
order์viewUrl๋ฅผ ํจ๊ป ์ ๋ฌํฉ๋๋ค. -
์ฌ๋ฌ์ฅ์ ์ด๋ฏธ์ง ์ ๋ก๋ ์
order`์ `viewUrl๋ฅผ ํ๋์ ๊ฐ์ผ๋ก ๋ฌถ์ด์ ์ ๋ฌํด์ผํฉ๋๋ค.
-
-
expiryTime์ ๋ฐ๊ธ ๋ฐ์uploadUrl์ ๋ง๋ฃ ์๊ฐ์ ๋ํ๋ ๋๋ค.(๋จ์ : ๋ถ)
3. ๊ถํ (auth) ๊ด๋ จ API
3.2. Apple ๋ก๊ทธ์ธ์ฉ Nonce ๋ฐ๊ธ
-
Apple ๋ก๊ทธ์ธ ํ๋ก์ธ์ค์์ ์ฌ์ฉํ ์ผํ์ฑ Nonce ๊ฐ์ ๋ฐ๊ธํฉ๋๋ค.
-
์ด Nonce๋ Apple ๋ก๊ทธ์ธ ์ ๋ณด์์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
GET /api/v2/auth/apple/nonce
์์ฒญ ํ๋ผ๋ฏธํฐ
$ curl 'https://api.bottle-note.com/api/v2/auth/apple/nonce?_csrf=KNfV8gRYUwEetm0-x7tcRaIa_1teJXZKFixWdw7kZOJwLrL7Tua3wGE7MmQz0wlao5ZoJ8Aj0mNqRhVnJhxnETfTXYRJS4XM' -i -X GET \
-H 'Content-Type: application/json;charset=UTF-8'
GET /api/v2/auth/apple/nonce?_csrf=KNfV8gRYUwEetm0-x7tcRaIa_1teJXZKFixWdw7kZOJwLrL7Tua3wGE7MmQz0wlao5ZoJ8Aj0mNqRhVnJhxnETfTXYRJS4XM HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: api.bottle-note.com
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
Apple ๋ก๊ทธ์ธ์ฉ ์ผํ์ฑ Nonce ๊ฐ |
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 32
{
"nonce" : "test-nonce-123"
}
3.3. Apple ๋ก๊ทธ์ธ
-
Apple ID๋ฅผ ํตํ ๋ก๊ทธ์ธ์ ์ํํฉ๋๋ค.
-
Apple์์ ๋ฐ๊ธ๋ฐ์ ID Token๊ณผ ์ด์ ์ ๋ฐ๊ธ๋ฐ์ Nonce ๊ฐ์ด ํ์ํฉ๋๋ค.
-
์ฑ๊ณต ์ ์ก์ธ์ค ํ ํฐ์ ๋ฐํํ๊ณ , ๋ฆฌํ๋ ์ ํ ํฐ์ HttpOnly ์ฟ ํค๋ก ์ค์ ๋ฉ๋๋ค.
-
์ต์ด ๋ก๊ทธ์ธ ์
isFirstLogin`์ด true๋ก ๋ฐํ๋๋ฉฐ, ์๋ ์์ฑ๋ ๋๋ค์์ด `nicknameํ๋์ ํฌํจ๋ฉ๋๋ค. -
๊ธฐ์กด ์ฌ์ฉ์์ ๊ฒฝ์ฐ `isFirstLogin`์ด false๋ก ๋ฐํ๋๋ฉฐ, ๊ธฐ์กด ๋๋ค์์ด ๋ฐํ๋ฉ๋๋ค.
POST /api/v2/auth/apple
์์ฒญ ํ๋ผ๋ฏธํฐ
$ curl 'https://api.bottle-note.com/api/v2/auth/apple?_csrf=zvqsDR6C_tDzMe8Dr5Ni0fPXadh_Unn-r10vxANatA17aj8HrMmaOCawx-XeV9lin75W48rnRLobMRzTzG4d_WZq1jRLXQk-' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"idToken" : "test-id-token",
"nonce" : "test-nonce"
}'
POST /api/v2/auth/apple?_csrf=zvqsDR6C_tDzMe8Dr5Ni0fPXadh_Unn-r10vxANatA17aj8HrMmaOCawx-XeV9lin75W48rnRLobMRzTzG4d_WZq1jRLXQk- HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 59
Host: api.bottle-note.com
{
"idToken" : "test-id-token",
"nonce" : "test-nonce"
}
| path | type | optional | description |
|---|---|---|---|
|
|
Apple์์ ๋ฐ๊ธ๋ฐ์ ID ํ ํฐ |
|
|
|
์ด์ ์ ๋ฐ๊ธ๋ฐ์ Nonce ๊ฐ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
๋ฐ๊ธ๋ ์ก์ธ์ค ํ ํฐ |
|
|
์ต์ด ๋ก๊ทธ์ธ ์ฌ๋ถ (true: ์ต์ด ๋ก๊ทธ์ธ, false: ๊ธฐ์กด ์ฌ์ฉ์) |
|
|
์ฌ์ฉ์ ๋๋ค์ (์ต์ด ๋ก๊ทธ์ธ ์ ์๋ ์์ฑ๋ ๋๋ค์) |
HTTP/1.1 200 OK
Set-Cookie: refresh-token=test-refresh-token; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Secure; HttpOnly
Content-Type: application/json;charset=UTF-8
Content-Length: 107
{
"accessToken" : "test-access-token",
"isFirstLogin" : true,
"nickname" : "๋ถ๋๋ฌ์ด๋ชฐํธ1234"
}
3.4. Kakao ๋ก๊ทธ์ธ
-
Kakao ID๋ฅผ ํตํ ๋ก๊ทธ์ธ์ ์ํํฉ๋๋ค.
-
Kakao์์ ๋ฐ๊ธ๋ฐ์ ์ก์ธ์ค ํ ํฐ์ด ํ์ํฉ๋๋ค.
-
์ฑ๊ณต ์ ์ก์ธ์ค ํ ํฐ์ ๋ฐํํ๊ณ , ๋ฆฌํ๋ ์ ํ ํฐ์ HttpOnly ์ฟ ํค๋ก ์ค์ ๋ฉ๋๋ค.
-
์ต์ด ๋ก๊ทธ์ธ ์
isFirstLogin`์ด true๋ก ๋ฐํ๋๋ฉฐ, ์๋ ์์ฑ๋ ๋๋ค์์ด `nicknameํ๋์ ํฌํจ๋ฉ๋๋ค. -
๊ธฐ์กด ์ฌ์ฉ์์ ๊ฒฝ์ฐ `isFirstLogin`์ด false๋ก ๋ฐํ๋๋ฉฐ, ๊ธฐ์กด ๋๋ค์์ด ๋ฐํ๋ฉ๋๋ค.
POST /api/v2/auth/kakao
์์ฒญ ํ๋ผ๋ฏธํฐ
$ curl 'https://api.bottle-note.com/api/v2/auth/kakao?_csrf=TohBpWz2jHuFuwAjIPyVAUqwSRqn1oUd9HFTr3CApeTmtIfYdrkknAiSvR2ojGQQFNGhMXqGZCKW5rcwkRI3zBa1x9eE0ePq' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"accessToken" : "test-kakao-access-token"
}'
POST /api/v2/auth/kakao?_csrf=TohBpWz2jHuFuwAjIPyVAUqwSRqn1oUd9HFTr3CApeTmtIfYdrkknAiSvR2ojGQQFNGhMXqGZCKW5rcwkRI3zBa1x9eE0ePq HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 47
Host: api.bottle-note.com
{
"accessToken" : "test-kakao-access-token"
}
| path | type | optional | description |
|---|---|---|---|
|
|
์นด์นด์ค์์ ๋ฐ๊ธ๋ฐ์ ์ก์ธ์ค ํ ํฐ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
๋ฐ๊ธ๋ ์ก์ธ์ค ํ ํฐ |
|
|
์ต์ด ๋ก๊ทธ์ธ ์ฌ๋ถ (true: ์ต์ด ๋ก๊ทธ์ธ, false: ๊ธฐ์กด ์ฌ์ฉ์) |
|
|
์ฌ์ฉ์ ๋๋ค์ (์ต์ด ๋ก๊ทธ์ธ ์ ์๋ ์์ฑ๋ ๋๋ค์) |
HTTP/1.1 200 OK
Set-Cookie: refresh-token=test-refresh-token; Path=/; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Secure; HttpOnly
Content-Type: application/json;charset=UTF-8
Content-Length: 107
{
"accessToken" : "test-access-token",
"isFirstLogin" : true,
"nickname" : "๋ถ๋๋ฌ์ด๋ชฐํธ1234"
}
3.5. ๋ฃจํธ ๊ด๋ฆฌ์ ๊ถํ ๊ฒ์ฆ
-
ํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์๊ฐ ๋ฃจํธ ๊ด๋ฆฌ์ ๊ถํ์ ๊ฐ์ง๊ณ ์๋์ง ๊ฒ์ฆํฉ๋๋ค.
-
๊ฐ๋ฐ / ์ด์ ํ๊ฒฝ์ด ๋ณ๊ฒฝ ๊ฐ๋ฅํ์ง ๊ฒ์ฆํ๋๋ฐ ํ์ฉ ํ ์ ์์ต๋๋ค.
GET /api/v2/auth/admin/permissions
์์ฒญ ํ๋ผ๋ฏธํฐ
$ curl 'https://api.bottle-note.com/api/v2/auth/admin/permissions?_csrf=uACQ097h6K0Ic2G-NBSo0No4Zdd2sEDFeAyGNDhPRK0CKCDyiDSht-vW2MglRVWPBTmcsu4BSLZOh3HoT2rlUVsuJp1gTRXA' -i -X GET \
-H 'Content-Type: application/json;charset=UTF-8'
GET /api/v2/auth/admin/permissions?_csrf=uACQ097h6K0Ic2G-NBSo0No4Zdd2sEDFeAyGNDhPRK0CKCDyiDSht-vW2MglRVWPBTmcsu4BSLZOh3HoT2rlUVsuJp1gTRXA HTTP/1.1
Content-Type: application/json;charset=UTF-8
Host: api.bottle-note.com
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
๊ฒ์ฆ ๊ฒฐ๊ณผ |
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ๊ฐ false์ผ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง(์์ ๊ฒฝ์ฐ null) |
|
|
์๋ฒ ์ธ์ฝ๋ฉ ์ ๋ |
|
|
์๋ฒ ๋ฒ์ |
|
|
์๋ฒ ๊ฒฝ๋ก ๋ฒ์ |
|
|
์๋ฒ ์๋ต ์๊ฐ |
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 251
{
"success" : true,
"code" : 200,
"data" : true,
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 12, 824160578 ],
"serverPathVersion" : "v1"
}
}
4. ํ์ (user) ๊ด๋ จ API
4.1. ๋ก๊ทธ์ธ
๊ธฐ๋ณธ์ ์ธ ์ธ์ฆ์ ์์ ๋ก๊ทธ์ธ API ์๋ฒ์์ ์ํ๋ฉ๋๋ค.
๋ณดํ๋ ธํธ ์๋ฒ์์๋ ๋๋ค์ ์์ฑ์ ํ ๋ค, AccessToken๊ณผ RefreshToken์ ๋ฐ๊ธํฉ๋๋ค.
-
AccessToken์ Response Body๋ก ๋ฐํ๋ฉ๋๋ค.
-
RefreshToken์ Response Header์ Cookie์ ๋ด์ ๋ฐํ๋ฉ๋๋ค.
-
gender๋ MALE, FEMALE๋ง ๊ฐ๋ฅํฉ๋๋ค.
-
socialType์ KAKAO, NAVER, GOOGLE๋ง ๊ฐ๋ฅํฉ๋๋ค.
| ์์ฑ | ์ค๋ช |
|---|---|
|
์ก์ธ์ค ํ ํฐ |
|
๋ฆฌํ๋ ์ฌ ํ ํฐ |
POST /api/v1/oauth/login
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
์ด๋ฉ์ผ |
|
|
|
์์ ๋ก๊ทธ์ธ ์ ๊ณต์์ ๊ณ ์ ์๋ณ์ |
|
|
|
O |
์ฑ๋ณ |
|
|
O |
๋์ด |
|
|
์์ ๋ก๊ทธ์ธ ํ์ |
{
"email" : "cdm2883@naver.com",
"socialUniqueId" : "",
"socialType" : "KAKAO",
"gender" : "MALE",
"age" : 27
}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ก์ธ์ค ํ ํฐ |
|
|
์ต์ด ๋ก๊ทธ์ธ ์ฌ๋ถ (true: ์ต์ด ๋ก๊ทธ์ธ, false: ๊ธฐ์กด ์ฌ์ฉ์) |
|
|
์ฌ์ฉ์ ๋๋ค์ (์ต์ด ๋ก๊ทธ์ธ ์ ์๋ ์์ฑ๋ ๋๋ค์) |
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ๊ฐ false์ผ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง(์์ ๊ฒฝ์ฐ null) |
|
|
์๋ฒ ์ธ์ฝ๋ฉ ์ ๋ |
|
|
์๋ฒ ๋ฒ์ |
|
|
์๋ฒ ๊ฒฝ๋ก ๋ฒ์ |
|
|
์๋ฒ ์๋ต ์๊ฐ |
HTTP/1.1 200 OK
Set-Cookie: refresh-token=eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJn44WB44WBZ2dAbmF2ZXIuY29tIiwicm9sZXMiOiJST0xFX1VTRVIiLCJ1c2VySWQiOjE2LCJpYXQiOjE3MTQ5NzU2MjMsImV4cCI6MTcxNjE4NTIyM30.lvmPueUcOb1erv5Llo4qhEUQ_gtWrpFGbBHDw-Pi94qj8MGojoEI3ugdMo8PwoKgrVQZ_gBwBbytwjxh8XktUg; Path=/; Max-Age=1209600; Expires=Wed, 22 Apr 2026 13:53:13 GMT; Secure; HttpOnly
Content-Type: application/json;charset=UTF-8
Content-Length: 560
{
"success" : true,
"code" : 200,
"data" : {
"accessToken" : "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJn44WB44WBZ2dAbmF2ZXIuY29tIiwicm9sZXMiOiJST0xFX1VTRVIiLCJ1c2VySWQiOjE2LCJpYXQiOjE3MTQ5NzU2MjMsImV4cCI6MTcxNDk3NjUyM30.41SuOBgmX-sd8nrMbC-xm0kH6rbny_SMYCKWE4rNQEZgSrRPS0HvYv0X7E-weo6sHlWWm1OmiQgHl4-uy6-9ig",
"isFirstLogin" : null,
"nickname" : null
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 13, 400701337 ],
"serverPathVersion" : "v1"
}
}
4.2. ๋ฒ ์ด์ง ํ์๊ฐ์
๊ฒ์คํธ ๋ก๊ทธ์ธ API
๋ฒ ์ด์ง ํ์๊ฐ์ API
POST /api/v1/oauth/basic/signup
$ curl 'https://api.bottle-note.com/api/v1/oauth/basic/signup?_csrf=kBUc6KpG-SrvtYAeRpRtwI0Dz1brKD_W_0jsGm1rCksu-mgtoSJ_jMhxyknCjLcqJblZ8LRi4m_cGQj7yXCKLQsJPHwcyVxM' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"email" : "test@email.com",
"password" : "test-password",
"age" : 27,
"gender" : null
}'
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
์ด๋ฉ์ผ |
|
|
|
๋น๋ฐ๋ฒํธ |
|
|
|
๋์ด |
|
|
|
์ฑ๋ณ |
{
"email" : "test@email.com",
"password" : "test-password",
"age" : 27,
"gender" : null
}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
๊ฒฐ๊ณผ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์ด๋ฉ์ผ |
|
|
๋๋ค์ |
|
|
accessToken |
|
|
refreshToken |
{
"success" : true,
"code" : 200,
"data" : {
"message" : "๋ถ๋๋ฌ์ด๋ชฐํธ๋ ํ์ํฉ๋๋ค!",
"email" : "test@email.com",
"nickname" : "๋ถ๋๋ฌ์ด๋ชฐํธ",
"accessToken" : "access-token",
"refreshToken" : "refresh-token"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 13, 353453435 ],
"serverPathVersion" : "v1"
}
}
4.3. ๋ฒ ์ด์ง ๋ก๊ทธ์ธ
๋ฒ ์ด์ง ํ์๊ฐ์ API
POST /api/v1/oauth/basic/login
$ curl 'https://api.bottle-note.com/api/v1/oauth/basic/login?_csrf=NdjREKZFBr5gg-InPB6wc01eCXtL6jPaDg8yxWzrGN-GMvChBOjnJ8V2Z9hN5YAWBTOERStqJBp7iQL3OmoF_V3bee2_A8LA' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"email" : "test@email.com",
"password" : "test-password"
}'
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
์ด๋ฉ์ผ |
|
|
|
๋น๋ฐ๋ฒํธ |
{
"email" : "test@email.com",
"password" : "test-password"
}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
๊ฒฐ๊ณผ |
|
|
accessToken |
|
|
์ต์ด ๋ก๊ทธ์ธ ์ฌ๋ถ (true: ์ต์ด ๋ก๊ทธ์ธ, false: ๊ธฐ์กด ์ฌ์ฉ์) |
|
|
์ฌ์ฉ์ ๋๋ค์ (์ต์ด ๋ก๊ทธ์ธ ์ ์๋ ์์ฑ๋ ๋๋ค์) |
{
"success" : true,
"code" : 200,
"data" : {
"accessToken" : "access-token",
"isFirstLogin" : null,
"nickname" : null
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 13, 425512373 ],
"serverPathVersion" : "v1"
}
}
4.4. ํ ํฐ ์ฌ๋ฐ๊ธ
ํ ํฐ(์ก์ธ์คํ ํฐ, ๋ฆฌํ๋ ์ฌ ํ ํฐ)์ ์ฌ๋ฐ๊ธํฉ๋๋ค.
-
POST ์์ฒญ์ ํค๋์ ์ฒจ๋ถ ๋ ๋ฆฌํ๋ ์ฌ ํ ํฐ์ ํ์ฑํ์ฌ ์ ํจ์ฑ์ ๊ฒ์ฆํฉ๋๋ค.
-
๊ฒ์ฆ์ด ํต๊ณผ๋๋ฉด ์๋ก์ด ์ก์ธ์คํ ํฐ๊ณผ ๋ฆฌํ๋ ์ฌ ํ ํฐ์ ๋ฐ๊ธํฉ๋๋ค.
-
AccessToken์ Response Body๋ก ๋ฐํ๋ฉ๋๋ค.
-
RefreshToken์ Response Header์ Cookie์ ๋ด์ ๋ฐํ๋ฉ๋๋ค.
-
๋ ํ๋ ์ ํ ํฐ์ด null์ด๋ฉด ํ ํฐ ๊ฒ์ฆ ์ UserException์ด ๋ฐ์ํฉ๋๋ค.
POST /api/v1/oauth/reissue
์์ฒญ ํ๋ผ๋ฏธํฐ
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ก์ธ์ค ํ ํฐ |
|
|
์ต์ด ๋ก๊ทธ์ธ ์ฌ๋ถ (true: ์ต์ด ๋ก๊ทธ์ธ, false: ๊ธฐ์กด ์ฌ์ฉ์) |
|
|
์ฌ์ฉ์ ๋๋ค์ (์ต์ด ๋ก๊ทธ์ธ ์ ์๋ ์์ฑ๋ ๋๋ค์) |
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ๊ฐ false์ผ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง(์์ ๊ฒฝ์ฐ null) |
|
|
์๋ฒ ์ธ์ฝ๋ฉ ์ ๋ |
|
|
์๋ฒ ๋ฒ์ |
|
|
์๋ฒ ๊ฒฝ๋ก ๋ฒ์ |
|
|
์๋ฒ ์๋ต ์๊ฐ |
HTTP/1.1 200 OK
Set-Cookie: refresh-token=new-refresh-token; Path=/; Max-Age=1209600; Expires=Wed, 22 Apr 2026 13:53:13 GMT; Secure; HttpOnly
Content-Type: application/json;charset=UTF-8
Content-Length: 341
{
"success" : true,
"code" : 200,
"data" : {
"accessToken" : "new-access-token",
"isFirstLogin" : null,
"nickname" : null
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 13, 325834288 ],
"serverPathVersion" : "v1"
}
}
4.5. ๋๋ค์ ๋ณ๊ฒฝ
๋๋ค์ ๋ณ๊ฒฝ API๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ํ ์์ ์ ๋๋ค์์ ๋ณ๊ฒฝํ ์ ์๊ฒ ํด์ค๋๋ค.
๋๋ค์ ๋ณ๊ฒฝ ์์ฒญ์ ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํฉ๋๋ค:
-
๋๋ค์์ ์ค๋ณต๋ ์ ์์ต๋๋ค.
-
๋๋ค์์ ์ต์ 2์ ์ด์, ์ต๋ 11์ ์ดํ์ฌ์ผ ํฉ๋๋ค.
-
๋๋ค์์ ํ๊ธ, ์๋ฌธ, ์ซ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
-
๋๋ค์์ ๊ณต๋ฐฑ์ ํฌํจํ ์ ์์ต๋๋ค.
-
userId์ newNickname์ ํ์ ์์ฒญ ํ๋์ ๋๋ค.
PATCH /api/v1/users/nickname
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
๋ณ๊ฒฝํ ์ ๋๋ค์ |
{
"nickName" : "newNickname"
}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
๋ฉ์์ง |
|
|
์ฌ์ฉ์ ID |
|
|
์ด์ ๋๋ค์ |
|
|
๋ณ๊ฒฝ๋ ๋๋ค์ |
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ๊ฐ false์ผ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง(์์ ๊ฒฝ์ฐ null) |
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 419
{
"success" : true,
"code" : 200,
"data" : {
"message" : "๋๋ค์์ด ์ฑ๊ณต์ ์ผ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค.",
"userId" : 1,
"beforeNickname" : "beforeNickname",
"changedNickname" : "newNickname"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 13, 14430000 ],
"serverPathVersion" : "v1"
}
}
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
REQUIRED_USER_ID |
BAD_REQUEST |
์ ๊ทผํ ์ ์๋ ๋ง์ดํ์ด์ง์ ๋๋ค. |
USER_NICKNAME_NOT_VALID |
BAD_REQUEST |
์ค๋ณต๋ ๋๋ค์์ ๋๋ค. |
USER_NOT_FOUND |
NOT_FOUND |
์ ์ ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. |
4.6. ํ๋กํ ๋ณ๊ฒฝ
์ฌ์ฉ์์ ํ๋กํ ์ด๋ฏธ์ง๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
์ด๋ฏธ์ง url์ ๋ฐ์์ ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํฉ๋๋ค. ์ด๋ฏธ์ง url์ nullํ์ฉ๋ฉ๋๋ค. null์ผ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ก ์ธ์ํฉ๋๋ค.
===
PATCH /api/v1/users/profile-image
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
๋ณ๊ฒฝํ ํ๋กํ ์ด๋ฏธ์ง URL |
PATCH /api/v1/users/profile-image?_csrf=iFrV_B-b0-cjJvw5uuWTnRVRoKYiOkp3X4FD3l6X-bm8zvA3vG-0ySv45oMOEs4M3sinqyBkjZ8aWS9aaeJw7W-vzoCE-sAB HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 69
Host: api.bottle-note.com
{
"viewUrl" : "https://api.bottle-note.com/new-profile-image.jpg"
}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ฌ์ฉ์ ID |
|
|
๋ณ๊ฒฝ๋ ํ๋กํ ์ด๋ฏธ์ง URL |
|
|
์ฝ๋ฐฑ URL |
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ๊ฐ false์ผ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง(์์ ๊ฒฝ์ฐ null) |
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 395
{
"success" : true,
"code" : 200,
"data" : {
"userId" : 1,
"profileImageUrl" : "http://example.com/new-profile-image.jpg",
"callback" : "https://bottle-note.com/api/v1/users/1"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 13, 39084323 ],
"serverPathVersion" : "v1"
}
}
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
USER_NOT_FOUND |
NOT_FOUND |
์ ์ ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. |
4.7. ํ์ฌ ๋ก๊ทธ์ธ ์ฌ์ฉ์ ๋ฉํ ์ ๋ณด ์กฐํ
ํ์ฌ ์ฌ์ฉ์์ ๋ฉํ ์ ๋ณด๋ฅผ ์กฐํํ๋ค.
์์ฒญ ์ ์ถ๊ฐ์ ์ธ ํ์ ์ ๋ณด๋ค์ ์ถํ ์ถ๊ฐ ํ ์ ์๋ค.
===
PATCH /api/v1/users/current
์์ฒญ ํ๋ผ๋ฏธํฐ
$ curl 'https://api.bottle-note.com/api/v1/users/current?_csrf=JCLDaY9cI09-4j8XZp2ifoW9y5yH9sAuQSuxPdFlwU2Mt4eDHBKnX7hpEnxT2g4lUrCWG7GP5qSzzqQDcBjTX7UEonS91bDn' -i -X GET \
-H 'Content-Type: application/json;charset=UTF-8'
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
ํ์ฌ ๋ก๊ทธ์ธํ ์ ์ ์์ด๋ |
|
|
ํ์ฌ ๋ก๊ทธ์ธํ ์ ์ ๋๋ค์ |
|
|
ํ์ฌ ๋ก๊ทธ์ธํ ์ ์ ํ๋กํ ์ด๋ฏธ์ง URL |
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 355
{
"success" : true,
"code" : 200,
"data" : {
"id" : 1,
"nickname" : "๋ก๊ทธ์ธํ_์ ์ _๋๋ค์",
"imageUrl" : "์์์๋ ์์"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 13, 518992248 ],
"serverPathVersion" : "v1"
}
}
4.8. ํ์ ํํด
ํ์ํํด API์ ๋๋ค.
-
Authorization ํค๋์ ์ฒจ๋ถํ ์ก์ธ์คํ ํฐ์ผ๋ก, ์ ์ ID๋ฅผ ์กฐํํฉ๋๋ค.
-
๋ฐ์ดํฐ๋ฒ ์ด์ค์
status์ปฌ๋ผ์ดDELETED๋ก ์์ ๋ฉ๋๋ค.
DELETE /api/v1/users
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ฑ๊ณต ๋ฉ์์ง ์ฝ๋ |
|
|
์ฑ๊ณต ๋ฉ์์ง |
|
|
์ ์ ์์ด๋ |
|
|
์๋ฒ ์๋ต ์ผ์ |
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 423
{
"success" : true,
"code" : 200,
"data" : {
"codeMessage" : "USER_WITHDRAW_SUCCESS",
"message" : "์ฑ๊ณต์ ์ผ๋ก ํํด๊ฐ ์๋ฃ๋์์ต๋๋ค",
"userId" : 1,
"responseAt" : "2026-04-08 13:53:13"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 13, 540370865 ],
"serverPathVersion" : "v1"
}
}
4.9. ํ์ ๋ณต๊ตฌ
ํ์ ํํด ํ ๋ณต๊ตฌ ์์ฒญ API์ ๋๋ค.
POST /api/v1/oauth/restore
$ curl 'https://api.bottle-note.com/api/v1/oauth/restore?_csrf=ZlBxqVLD3vNao6FqIHYdFADRekeOVvF-gEJ5F29VwxfWGCnWA2hCmjP65sJ3lpdeFlspcWXiV3-2ZMBTuXtLIgplpXW0KR-3' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"email" : "test-email",
"password" : "test-password"
}'
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
์ด๋ฉ์ผ |
|
|
|
๋น๋ฐ๋ฒํธ |
POST /api/v1/oauth/restore?_csrf=ZlBxqVLD3vNao6FqIHYdFADRekeOVvF-gEJ5F29VwxfWGCnWA2hCmjP65sJ3lpdeFlspcWXiV3-2ZMBTuXtLIgplpXW0KR-3 HTTP/1.1
Content-Type: application/json;charset=UTF-8
Content-Length: 60
Host: api.bottle-note.com
{
"email" : "test-email",
"password" : "test-password"
}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 264
{
"success" : true,
"code" : 200,
"data" : "restore success",
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 13, 464323739 ],
"serverPathVersion" : "v1"
}
}
4.10. ๋ง์ดํ์ด์ง ๊ธฐ๋ณธ์ ๋ณด ์กฐํ
๋ง์ดํ์ด์ง ์ ๊ทผ์ ๊ธฐ๋ณธ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
์กฐํํ ์ ์๋ ์ ๋ณด๋
-
๋์ ์ฌ์ฉ์์ ํ๋กํ ์ด๋ฏธ์ง
-
๋์ ์ฌ์ฉ์์ ๋๋ค์
-
๋์ ์ฌ์ฉ์๋ฅผ ํ๋ก์ฐํ ์ ์ ์ (ํ๋ก์ ์)
-
๋์ ์ฌ์ฉ์๊ฐ ํ๋ก์ฐํ ์ ์ ์ (ํ๋ก์ ์)
-
๋์ ์ฌ์ฉ์๊ฐ ์์คํค๋ฅผ ์ฐํ๊ธฐ ํ ๊ฐฏ์
-
๋์ ์ฌ์ฉ์๊ฐ ์์คํค์ ์์ฑํ ๋ฆฌ๋ทฐ ๊ฐฏ์
-
๋์ ์ฌ์ฉ์๊ฐ ์์คํค์ ํ๊ฐํ ๋ณ์ ์ ๊ฐฏ์
-
๋ก๊ทธ์ธ ์ฌ์ฉ์๊ฐ ๋์์ฌ์ฉ์๋ฅผ ํ๋ก์ ํ๋์ง ์ /๋ฌด
-
๋ก๊ทธ์ธ ์ฌ์ฉ์์ ๋ง์ดํ์ด์ง ๋์ ์ฌ์ฉ์๊ฐ ๊ฐ์ ์ฌ์ฉ์์ธ์ง ์ /๋ฌด
GET /api/mypage/{userId}
์์ฒญ ํ๋ผ๋ฏธํฐ
-
userId : string (path) - ๋์ ์ฌ์ฉ์์ ์์ด๋
$ curl 'https://api.bottle-note.com/api/v1/my-page/1?_csrf=m95ETQl9iWPoA5zdq-c6SrwnABmuYXQE9ypLT64xkxMcGQUso-khLjFOu1rFM67km8oOed1DLSCdUhIpwExzeZYA9XJ_LTRN' -i -X GET \
-H 'Content-Type: application/json;charset=UTF-8'
์๋ต ๊ฒฐ๊ณผ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์๋ต ๋ฐ์ดํฐ |
|
|
์ ์ ์์ด๋ |
|
|
์ ์ ๋๋ค์ |
|
|
์ ์ ํ๋กํ ์ด๋ฏธ์ง URL |
|
|
๋ฆฌ๋ทฐ ์ |
|
|
ํ์ ์ |
|
|
์ฐํ ์ |
|
|
ํ๋ก์ ์ |
|
|
ํ๋ก์ ์ |
|
|
ํ๋ก์ฐ ์ฌ๋ถ |
|
|
๋ณธ์ธ ์ฌ๋ถ |
{
"success" : true,
"code" : 200,
"data" : {
"userId" : 1,
"nickName" : "nickname",
"imageUrl" : "imageUrl",
"reviewCount" : 10,
"ratingCount" : 20,
"pickCount" : 30,
"followerCount" : 40,
"followingCount" : 50,
"isFollow" : false,
"isMyPage" : false
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 13, 65821150 ],
"serverPathVersion" : "v1"
}
}
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
MYPAGE_NOT_ACCESSIBLE |
FORBIDDEN |
์ ๊ทผํ ์ ์๋ ๋ง์ดํ์ด์ง์ ๋๋ค. |
4.11. ๋ฆฌ๋ทฐ ๋ง์ด๋ณดํ ์กฐํ
-
๋ฆฌ๋ทฐ ๋ง์ด ๋ณดํ ์กฐํ API๋
์ฌ์ฉ์๊ฐ ์์คํค์ ๋จ ๋ฆฌ๋ทฐ๋ค์ ์กฐํํ๋ API์ ๋๋ค.
---
GET /api/v1/mypage/{userId}/my-bottle/reviews
---
์์ฒญํ๋ผ๋ฏธํฐ
-
userId : ์ฌ์ฉ์ ID (์กฐํ๋์ ์ฌ์ฉ์)
| Parameter | Description |
|---|---|
|
๊ฒ์ ํค์๋ |
|
์ง์ญ ID |
|
์ ๋ ฌ ํ์ (ํด๋น ๋ฌธ์ ํ๋จ enum ์ฐธ์กฐ) |
|
์ ๋ ฌ ์์(ํด๋น ๋ฌธ์ ํ๋จ enum ์ฐธ์กฐ) |
|
์กฐํ ํ ์์ ๊ธฐ์ค ์์น |
|
์กฐํ ํ ํ์ด์ง ์ฌ์ด์ฆ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์๋ต ๋ฐ์ดํฐ |
|
|
์ ์ ์์ด๋ |
|
|
๋ณธ์ธ ์ฌ๋ถ |
|
|
์ ์ฒด ๋ณดํ ์ |
|
|
๋ณดํ ๋ชฉ๋ก |
|
|
์์ฝ์ฌ ์์ด๋ |
|
|
์์ฝ์ฌ ํ๊ธ๋ช |
|
|
์์ฝ์ฌ ์๋ฌธ๋ช |
|
|
์์ฝ์ฌ ์นดํ ๊ณ ๋ฆฌ๋ช |
|
|
์์ฝ์ฌ ์ด๋ฏธ์ง URL |
|
|
HOT5 ์ฌ๋ถ |
|
|
๋ฆฌ๋ทฐ ID |
|
|
๋ด๊ฐ ์์ฑํ ๋ฆฌ๋ทฐ ์ฌ๋ถ |
|
|
๋ฆฌ๋ทฐ ๋ง์ง๋ง ์์ ์ผ |
|
|
๋ฆฌ๋ทฐ ๋ด์ฉ |
|
|
๋ฆฌ๋ทฐ ํ ์ด์คํ ํ๊ทธ |
|
|
๋ฒ ์คํธ ๋ฆฌ๋ทฐ ์ฌ๋ถ |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
์กฐํ ์ ๊ธฐ์ค ์ปค์ |
|
|
๋ค์ ํ์ด์ง ์ปค์ |
|
|
์กฐํ๋ ํ์ด์ง ์ฌ์ด์ฆ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ๊ฒ์์ด |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ง์ญ ID |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ ๋ ฌ ํ์ |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ ๋ ฌ ์์ |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ปค์ ๊ธฐ์ค |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ํ์ด์ง ์ฌ์ด์ฆ |
์ ๋ ฌ ํ์ (sortType)
LATEST |
์ต์ |
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
REQUIRED_USER_ID |
BAD_REQUEST |
์ ์ ์์ด๋๊ฐ ํ์ํฉ๋๋ค. |
MYBOTTLE_NOT_ACCESSIBLE |
FORBIDDEN |
์ ๊ทผํ ์ ์๋ ๋ง์ด๋ณดํํ์ด์ง์ ๋๋ค. |
4.12. ๋ณ์ ๋ง์ด๋ณดํ ์กฐํ
-
๋ณ์ ๋ง์ด ๋ณดํ ์กฐํ API๋
์ฌ์ฉ์๊ฐ ์์คํค์ ๋จ ๋ณ์ ๋ค์ ์กฐํํ๋ API์ ๋๋ค.
---
GET /api/v1/mypage/{userId}/my-bottle/ratings
---
์์ฒญํ๋ผ๋ฏธํฐ
-
userId : ์ฌ์ฉ์ ID (์กฐํ๋์ ์ฌ์ฉ์)
| Parameter | Description |
|---|---|
|
๊ฒ์ ํค์๋ |
|
์ง์ญ ID |
|
์ ๋ ฌ ํ์ (ํด๋น ๋ฌธ์ ํ๋จ enum ์ฐธ์กฐ) |
|
์ ๋ ฌ ์์(ํด๋น ๋ฌธ์ ํ๋จ enum ์ฐธ์กฐ) |
|
์กฐํ ํ ์์ ๊ธฐ์ค ์์น |
|
์กฐํ ํ ํ์ด์ง ์ฌ์ด์ฆ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์๋ต ๋ฐ์ดํฐ |
|
|
์ ์ ์์ด๋ |
|
|
๋ณธ์ธ ์ฌ๋ถ |
|
|
์ ์ฒด ๋ณดํ ์ |
|
|
๋ณดํ ๋ชฉ๋ก |
|
|
์์ฝ์ฌ ์์ด๋ |
|
|
์์ฝ์ฌ ํ๊ธ๋ช |
|
|
์์ฝ์ฌ ์๋ฌธ๋ช |
|
|
์์ฝ์ฌ ์นดํ ๊ณ ๋ฆฌ๋ช |
|
|
์์ฝ์ฌ ์ด๋ฏธ์ง URL |
|
|
HOT5 ์ฌ๋ถ |
|
|
๋ด ๋ณ์ |
|
|
์ ์ฒด ํ๊ท ๋ณ์ |
|
|
์ ์ฒด ํ๊ท ๋ณ์ ์ฐธ์ฌ์ ์ |
|
|
๋ณ์ ์์ ์๊ฐ |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
์กฐํ ์ ๊ธฐ์ค ์ปค์ |
|
|
๋ค์ ํ์ด์ง ์ปค์ |
|
|
์กฐํ๋ ํ์ด์ง ์ฌ์ด์ฆ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ๊ฒ์์ด |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ง์ญ ID |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ ๋ ฌ ํ์ |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ ๋ ฌ ์์ |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ปค์ ๊ธฐ์ค |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ํ์ด์ง ์ฌ์ด์ฆ |
์ ๋ ฌ ํ์ (sortType)
LATEST |
์ต์ |
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
REQUIRED_USER_ID |
BAD_REQUEST |
์ ์ ์์ด๋๊ฐ ํ์ํฉ๋๋ค. |
MYBOTTLE_NOT_ACCESSIBLE |
FORBIDDEN |
์ ๊ทผํ ์ ์๋ ๋ง์ด๋ณดํํ์ด์ง์ ๋๋ค. |
4.13. ์ฐ ๋ง์ด๋ณดํ ์กฐํ
-
์ฐ ๋ง์ด ๋ณดํ ์กฐํ API๋
์ฌ์ฉ์๊ฐ ์์คํค์ ๋จ ์ฐ๋ค์ ์กฐํํ๋ API์ ๋๋ค.
---
GET /api/v1/mypage/{userId}/my-bottle/picks
---
์์ฒญํ๋ผ๋ฏธํฐ
-
userId : ์ฌ์ฉ์ ID (์กฐํ๋์ ์ฌ์ฉ์)
| Parameter | Description |
|---|---|
|
๊ฒ์ ํค์๋ |
|
์ง์ญ ID |
|
์ ๋ ฌ ํ์ (ํด๋น ๋ฌธ์ ํ๋จ enum ์ฐธ์กฐ) |
|
์ ๋ ฌ ์์(ํด๋น ๋ฌธ์ ํ๋จ enum ์ฐธ์กฐ) |
|
์กฐํ ํ ์์ ๊ธฐ์ค ์์น |
|
์กฐํ ํ ํ์ด์ง ์ฌ์ด์ฆ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์๋ต ๋ฐ์ดํฐ |
|
|
์ ์ ์์ด๋ |
|
|
๋ณธ์ธ ์ฌ๋ถ |
|
|
์ ์ฒด ๋ณดํ ์ |
|
|
๋ณดํ ๋ชฉ๋ก |
|
|
์์ฝ์ฌ ์์ด๋ |
|
|
์์ฝ์ฌ ํ๊ธ๋ช |
|
|
์์ฝ์ฌ ์๋ฌธ๋ช |
|
|
์์ฝ์ฌ ์นดํ ๊ณ ๋ฆฌ๋ช |
|
|
์์ฝ์ฌ ์ด๋ฏธ์ง URL |
|
|
HOT5 ์ฌ๋ถ |
|
|
์ฐ ์ํ |
|
|
์ ์ฒด ์ฐํ ์ ์ ์ |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
์กฐํ ์ ๊ธฐ์ค ์ปค์ |
|
|
๋ค์ ํ์ด์ง ์ปค์ |
|
|
์กฐํ๋ ํ์ด์ง ์ฌ์ด์ฆ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ๊ฒ์์ด |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ง์ญ ID |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ ๋ ฌ ํ์ |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ ๋ ฌ ์์ |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ปค์ ๊ธฐ์ค |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ํ์ด์ง ์ฌ์ด์ฆ |
์ ๋ ฌ ํ์ (sortType)
LATEST |
์ต์ |
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
REQUIRED_USER_ID |
BAD_REQUEST |
์ ์ ์์ด๋๊ฐ ํ์ํฉ๋๋ค. |
MYBOTTLE_NOT_ACCESSIBLE |
FORBIDDEN |
์ ๊ทผํ ์ ์๋ ๋ง์ด๋ณดํํ์ด์ง์ ๋๋ค. |
4.14. ์ฌ์ฉ์ ๋๋ฐ์ด์ค ํ ํฐ ์ ์ฅ
์ฌ์ฉ์ ๋๋ฐ์ด์ค ํ ํฐ์ ๋ฑ๋กํ ์ ์์ต๋๋ค.
-
ํ ํฐ์ ํ ์ ์ ์ ๋ํด ์ฌ๋ฌ๊ฐ๊ฐ ๋ฑ๋ก๋ ์ ์์ต๋๋ค.
-
ํธ์ ์๋ฆผ์ ์ต์ ๊ฐฑ์ ์ ๊ธฐ์ค์ผ๋ก 3๊ฐ๊น์ง ๋ฐ์ก๋ฉ๋๋ค.
-
๋์ผํ ํ ํฐ์ผ๋ก ์ฌ ๋ฑ๋ก์ ๊ฐฑ์ ์ ์ญํ ์ ํฉ๋๋ค.
POST /api/v1/push/token
์์ฒญ ํ๋ผ๋ฏธํฐ
{
"deviceToken" : "3c759897-3a3c-46fa-972e-8db381ea5bcb",
"platform" : "IOS"
}
| path | type | optional | description |
|---|---|---|---|
|
|
์ ์ฅ๋ ๋๋ฐ์ด์ค ํ ํฐ |
|
|
|
๋๋ฐ์ด์ค ์ ๋ณด (IOS, ANDROID) |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์์ฒญ ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์๋ต ๋ฐ์ดํฐ |
|
|
์ ์ฅ๋ ๋๋ฐ์ด์ค ํ ํฐ |
|
|
๋๋ฐ์ด์ค ์ ๋ณด (IOS, ANDROID) |
|
|
์๋ต ๋ฉ์์ง |
{
"success" : true,
"code" : 200,
"data" : {
"deviceToken" : "3c759897-3a3c-46fa-972e-8db381ea5bcb",
"platform" : "IOS",
"message" : "DEVICE_TOKEN_SAVED"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 13, 688841535 ],
"serverPathVersion" : "v1"
}
}
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
DEVICE_TOKEN_REQUIRED |
BAD_REQUEST |
๋๋ฐ์ด์ค ํ ํฐ์ด ํ์ํฉ๋๋ค. |
PLATFORM_REQUIRED |
BAD_REQUEST |
ํ๋ซํผ์ด ํ์ํฉ๋๋ค. |
5. ๋ฐฐ๋ (banner) ๊ด๋ จ API
5.1. ํ ๋ฐฐ๋ ๋ชฉ๋ก ์กฐํ
ํ ํ๋ฉด์ ํ์ํ ํ์ฑํ๋ ๋ฐฐ๋ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค.
๋ฐฐ๋๋ sortOrder ๊ธฐ์ค ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ๋ฐํ๋ฉ๋๋ค.
GET /api/v1/banners?limit={limit}
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์กฐํํ ๋ฐฐ๋ ๊ฐ์ (๊ธฐ๋ณธ๊ฐ: 10, ์ต๋ ๊ถ์ฅ: 10) |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ (HTTP ์ํ ์ฝ๋) |
|
|
๋ฐฐ๋ ๋ชฉ๋ก |
|
|
๋ฐฐ๋ ๊ณ ์ ์๋ณ์ |
|
|
๋ฐฐ๋๋ช |
|
|
๋ฐฐ๋๋ช ํ ์คํธ ์์ (HEX) |
|
|
๋ฐฐ๋ ์ค๋ช ํํธ A |
|
|
๋ฐฐ๋ ์ค๋ช ํํธ B |
|
|
๋ฐฐ๋ ์ค๋ช ํ ์คํธ ์์ (HEX) |
|
|
๋ฐฐ๋ ์ด๋ฏธ์ง URL |
|
|
ํ ์คํธ ์์น (ํ๋จ TextPosition ์ฐธ์กฐ) |
|
|
ํด๋ฆญ ์ ์ด๋ํ URL |
|
|
์ธ๋ถ URL ์ฌ๋ถ (true: ์ธ๋ถ, false: ๋ด๋ถ) |
|
|
๋ฏธ๋์ด ์ ํ (IMAGE, VIDEO). ํ๋ก ํธ์๋์์ img/video ํ๊ทธ ๋ถ๊ธฐ์ฉ |
|
|
๋ฐฐ๋ ์ ํ (ํ๋จ BannerType ์ฐธ์กฐ) |
|
|
์ ๋ ฌ ์์ (์ค๋ฆ์ฐจ์) |
|
|
๋ ธ์ถ ์์์ผ์ (nullable) |
|
|
๋ ธ์ถ ์ข ๋ฃ์ผ์ (nullable) |
|
|
์๋ฌ ๋ชฉ๋ก (์ฑ๊ณต ์ ๋น ๋ฐฐ์ด) |
{
"success" : true,
"code" : 200,
"data" : [ {
"id" : 1,
"name" : "์ ๊ท ์์คํค ์ถ์ ์ด๋ฒคํธ",
"nameFontColor" : "ffffff",
"descriptionA" : "์ ๊ท ์์คํค ์ถ์ ๊ธฐ๋
",
"descriptionB" : "ํน๋ณ ์ด๋ฒคํธ๋ฅผ ์งํํฉ๋๋ค.",
"descriptionFontColor" : "ffffff",
"imageUrl" : "https://cdn.bottle-note.com/banners/event1.jpg",
"textPosition" : "LB",
"targetUrl" : "/events/new-whiskey",
"isExternalUrl" : false,
"mediaType" : "IMAGE",
"bannerType" : "CURATION",
"sortOrder" : 0,
"startDate" : [ 2025, 1, 1, 0, 0 ],
"endDate" : [ 2025, 12, 31, 23, 59 ]
}, {
"id" : 2,
"name" : "์ฌ์ฉ์ ์ค๋ฌธ์กฐ์ฌ",
"nameFontColor" : "ffffff",
"descriptionA" : "์๋น์ค ๊ฐ์ ์ ์ํ",
"descriptionB" : "์ค๋ฌธ์กฐ์ฌ์ ์ฐธ์ฌํด์ฃผ์ธ์.",
"descriptionFontColor" : "ffffff",
"imageUrl" : "https://cdn.bottle-note.com/banners/survey.jpg",
"textPosition" : "CENTER",
"targetUrl" : "https://forms.google.com/survey123",
"isExternalUrl" : true,
"mediaType" : "IMAGE",
"bannerType" : "SURVEY",
"sortOrder" : 1,
"startDate" : [ 2025, 6, 1, 0, 0 ],
"endDate" : [ 2025, 6, 30, 23, 59 ]
}, {
"id" : 3,
"name" : "์ ํด ๋ธ๋๋ ์๊ฐ",
"nameFontColor" : "ffffff",
"descriptionA" : "์๋ก์ด ์ ํด ๋ธ๋๋๋ฅผ",
"descriptionB" : "์๊ฐํฉ๋๋ค.",
"descriptionFontColor" : "ffffff",
"imageUrl" : "https://cdn.bottle-note.com/banners/partner.jpg",
"textPosition" : "RT",
"targetUrl" : "/partners/brand-abc",
"isExternalUrl" : false,
"mediaType" : "VIDEO",
"bannerType" : "PARTNERSHIP",
"sortOrder" : 2,
"startDate" : null,
"endDate" : null
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 9, 682584333 ],
"serverPathVersion" : "v1"
}
}
TextPosition (ํ ์คํธ ์์น)
๋ฐฐ๋ ๋ด ํ ์คํธ๊ฐ ํ์๋ ์์น๋ฅผ ์ง์ ํฉ๋๋ค.
| ์ฝ๋ | ์ค๋ช |
|---|---|
LT |
์ข์ธก ์๋จ (Left Top) |
LB |
์ข์ธก ํ๋จ (Left Bottom) |
RT |
์ฐ์ธก ์๋จ (Right Top) |
RB |
์ฐ์ธก ํ๋จ (Right Bottom) |
CENTER |
์ค์ (Center) |
BannerType (๋ฐฐ๋ ์ ํ)
๋ฐฐ๋์ ๋ชฉ์ ์ ๋ฐ๋ฅธ ์ ํ์ ๊ตฌ๋ถํฉ๋๋ค.
| ์ฝ๋ | ์ค๋ช |
|---|---|
SURVEY |
์ค๋ฌธ์กฐ์ฌ ๋ฐฐ๋ |
CURATION |
ํ๋ ์ด์ ๋ฐฐ๋ (์ถ์ฒ ์ฝํ ์ธ ) |
AD |
๊ด๊ณ ๋ฐฐ๋ |
PARTNERSHIP |
์ ํด ๋ฐฐ๋ |
ํด๋ผ์ด์ธํธ ๊ตฌํ ๊ฐ์ด๋
1. ๋ฐฐ๋ ํด๋ฆญ ์ ๋ผ์ฐํ ์ฒ๋ฆฌ
if (banner.isExternalUrl) {
// ์ธ๋ถ ๋ธ๋ผ์ฐ์ ๋๋ ์ธ์ฑ ์น๋ทฐ๋ก ์ด๊ธฐ
openExternalBrowser(banner.targetUrl)
} else {
// ์ฑ ๋ด๋ถ ํ๋ฉด์ผ๋ก ์ด๋
navigateToInternalRoute(banner.targetUrl)
}
2. ๋ด๋ถ URL ๋ผ์ฐํ ์์
-
ํ์ ํ์ (FE ํธํ ๋ฐฉ์๋๋ก)
3. ํ ์คํธ ์ค๋ฒ๋ ์ด ๋ฐฐ์น
`textPosition`์ ๋ฐ๋ผ ๋ฐฐ๋ ํ ์คํธ๋ฅผ ์ด๋ฏธ์ง ์์ ์ค๋ฒ๋ ์ดํฉ๋๋ค.
-
name: ๋ฐฐ๋ ์ ๋ชฉ (์์:nameFontColor) -
descriptionA,descriptionB: ๋ฐฐ๋ ์ค๋ช 2์ค (์์:descriptionFontColor) -
์์ ๊ฐ์ HEX ์ฝ๋ (์:
ffffff)
textPosition ๊ฐ์ ๋ฐ๋ผ ์ ์ ํ ์์น์ ํ
์คํธ๋ฅผ ๋ฐฐ์นํฉ๋๋ค.
ํ ์คํธ ํฌ์ง์ ์ ๋ฐ๋ฅธ name, description ์์น TEXT POSITION : ์์
-
LT (Left Top) : name : ์๋ / description : ์
-
LB (Left Bottom) : name : ์ / description : ์๋
-
RT (Right Top) : name : ์๋ / description : ์
-
RB (Right Bottom) : name : ์ / description : ์๋
-
CENTER (Center) : name : ์๋ / description : ์
์ฐธ๊ณ ์ฌํญ
-
๋นํ์ฑํ๋ ๋ฐฐ๋(
isActive=false)๋ ์กฐํ๋์ง ์์ต๋๋ค. -
startDate/`endDate`๊ฐ null์ธ ๊ฒฝ์ฐ ์์ ๋ ธ์ถ ๋ฐฐ๋์ ๋๋ค. -
`isExternalUrl=true`์ธ ๊ฒฝ์ฐ ์ ์ฐฝ(๋๋ ์ธ๋ถ ๋ธ๋ผ์ฐ์ )์ผ๋ก ์ด์ด์ผ ํฉ๋๋ค.
-
๊ธฐ๋ณธ `limit`์ 10์ด๋ฉฐ, ํ ํ๋ฉด์์๋ ์ต๋ 10๊ฐ๊น์ง ๋ ธ์ถ์ ๊ถ์ฅํฉ๋๋ค.
6. ๋๋ฌ๋ณด๊ธฐ (explore) ๊ด๋ จ API
6.1. ์์คํค ๋๋ฌ๋ณด๊ธฐ(standard) API
-
๊ธฐ๋ณธํ ์์คํค ๋๋ฌ๋ณด๊ธฐ API๋ฅผ ์ ์ํฉ๋๋ค.
-
์ ๋ ฌ ์ต์ ์ด ์๋ API ์ ๋๋ค ์๊ฐ์์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค
-
ํค์๋๋ ์ด๋ฆ, ์นดํ ๊ณ ๋ฆฌ, ์ง์ญ , ํ๊ทธ๋ฅผ ๋์์ผ๋ก ๊ฒ์ํฉ๋๋ค.
-
์ฌ๋ฌ ํค์๋๋ ๋ชจ๋ AND ์กฐ๊ฑด์ผ๋ก ๊ฒ์๋ฉ๋๋ค (๋ชจ๋ ํค์๋๋ฅผ ํฌํจํ๋ ํญ๋ชฉ๋ง ๊ฒฐ๊ณผ์ ํ์)
keywords="keyword1"&keywords="keyword2"
- ํํ๋ก ์ฌ๋ฌ ํค์๋๋ฅผ ์
๋ ฅํ ์ ์๋ค.
์์ฒญ ํ๋ผ๋ฏธํฐ
$ curl 'https://api.bottle-note.com/api/v1/alcohols/explore/standard?keywords=keyword1&keywords=keyword2&cursor=0&size=10' -i -X GET
GET /api/v1/alcohols/explore/standard?keywords=keyword1&keywords=keyword2&cursor=0&size=10 HTTP/1.1
Host: api.bottle-note.com
| Parameter | Description |
|---|---|
|
๊ฒ์์ด ๋ชฉ๋ก |
|
์กฐํ ํ ์์ ๊ธฐ์ค ์์น |
|
์กฐํ ํ ํ์ด์ง ์ฌ์ด์ฆ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ ์ฒด ์ ๋ฆฌ์คํธ์ ํฌ๊ธฐ |
|
|
์ ID |
|
|
์ ์ด๋ฏธ์ง URL |
|
|
์ ํ๊ธ ์ด๋ฆ |
|
|
์ ์๋ฌธ ์ด๋ฆ |
|
|
์ ํ๊ธ ์นดํ ๊ณ ๋ฆฌ |
|
|
์ ์๋ฌธ ์นดํ ๊ณ ๋ฆฌ |
|
|
์ ํ๊ธ ์ง์ญ |
|
|
์ ์๋ฌธ ์ง์ญ |
|
|
์บ์คํฌ ์ ๋ณด |
|
|
์์ฝ์ฌ ๋์ |
|
|
ํ๊ธ ์ฆ๋ฅ์ ์ด๋ฆ |
|
|
์๋ฌธ ์ฆ๋ฅ์ ์ด๋ฆ |
|
|
์ ํ์ |
|
|
์ ํ์ ์ด ๊ฐ์ |
|
|
๋ด ํ์ |
|
|
๋ด ํ๊ท ํ์ |
|
|
์ ์ฐ ์ฌ๋ถ |
|
|
ํ ์ด์คํ ํ๊ทธ ๋ชฉ๋ก |
|
|
๊ฒ์์ด ์ ๋ณด |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
์กฐํ ์ ๊ธฐ์ค ์ปค์ |
|
|
๋ค์ ํ์ด์ง ์ปค์ |
|
|
์กฐํ๋ ํ์ด์ง ์ฌ์ด์ฆ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 500,
"items" : [ {
"alcoholId" : 73,
"alcoholUrlImg" : "https://static.whiskybase.com/storage/whiskies/73/404573-big.jpg",
"korName" : "๊ธ๋ ๋ฆฌ๋ฒณ 17๋
๋ธ๋ ๋๋ ์์คํค",
"engName" : "Glenlivet 17 Years Blended",
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "Single Malt",
"korRegion" : "์ค์ฝํ๋๋/ํ์ด๋๋",
"engRegion" : "Scotland/Highlands",
"cask" : "Pedro Ximenez Sherry Casks",
"abv" : "51",
"korDistillery" : "๊ธ๋ ๋ฆฌ๋ฒณ ๋์คํธ๋ฌ๋ฆฌ",
"engDistillery" : "Glenlivet Distillery",
"rating" : 3.5,
"totalRatingsCount" : 457,
"myRating" : 1.0,
"myAvgRating" : 2.5,
"isPicked" : false,
"alcoholsTastingTags" : [ "๊ณผ์ผํฅ", "์คํฌํฅ", "๊ฟํฅ", "์ด์ฝ๋ฆฟ", "ํฅ๊ธํ" ]
}, {
"alcoholId" : 63,
"alcoholUrlImg" : "https://static.whiskybase.com/storage/whiskies/63/404563-big.jpg",
"korName" : "๋ฐ๋ฒ ๋ 17๋
์๊ทธ๋์ฒ ์์คํค",
"engName" : "Balvenie 17 Years Signature",
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "Single Malt",
"korRegion" : "์ค์ฝํ๋๋/ํ์ด๋๋",
"engRegion" : "Scotland/Highlands",
"cask" : "Pedro Ximenez Sherry Casks",
"abv" : "40",
"korDistillery" : "๋ฐ๋ฒ ๋ ๋์คํธ๋ฌ๋ฆฌ",
"engDistillery" : "Balvenie Distillery",
"rating" : 3.5,
"totalRatingsCount" : 155,
"myRating" : 1.0,
"myAvgRating" : 4.0,
"isPicked" : false,
"alcoholsTastingTags" : [ "์ํธ๋ฌ์ค", "๋ถ๋๋ฌ์ด", "ํฅ๊ธํ", "๋ฐ๋๋ผ" ]
}, {
"alcoholId" : 95,
"alcoholUrlImg" : "https://static.whiskybase.com/storage/whiskies/95/404595-big.jpg",
"korName" : "๊ธ๋ ํผ๋ 17๋
์ฑ๊ธ๋ชฐํธ ์์คํค",
"engName" : "Glenfiddich 17 Years Single Malt",
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "Single Malt",
"korRegion" : "์ค์ฝํ๋๋/ํ์ด๋๋",
"engRegion" : "Scotland/Highlands",
"cask" : "Pedro Ximenez Sherry Casks",
"abv" : "41",
"korDistillery" : "๊ธ๋ ํผ๋ ๋์คํธ๋ฌ๋ฆฌ",
"engDistillery" : "Glenfiddich Distillery",
"rating" : 3.5,
"totalRatingsCount" : 991,
"myRating" : 3.5,
"myAvgRating" : 0.5,
"isPicked" : false,
"alcoholsTastingTags" : [ "ํผํธํฅ", "๋ฌ๋ฌํ" ]
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 8, 302090818 ],
"pageable" : {
"currentCursor" : 0,
"cursor" : 0,
"pageSize" : 10,
"hasNext" : true
},
"searchParameters" : {
"keywords" : [ "keyword1", "keyword2" ]
},
"serverPathVersion" : "v1"
}
}
6.2. ๋ฆฌ๋ทฐ ๋๋ฌ๋ณด๊ธฐ(standard) API
-
๊ธฐ๋ณธํ ๋ฆฌ๋ทฐ ๋๋ฌ๋ณด๊ธฐ API๋ก, ์ฌ์ฉ์๋ค์ด ์์ฑํ ๋ฆฌ๋ทฐ๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
-
๋ฆฌ๋ทฐ๋ ์ต์ ์(์์ ์๊ฐ ๊ธฐ์ค)์ผ๋ก ์ ๋ ฌ๋์ด ์ ๊ณต๋ฉ๋๋ค.
-
๊ฒ์ ํค์๋๋ ์์ฑ์ ์ด๋ฆ, ์ ์ด๋ฆ, ๋ฆฌ๋ทฐ ๋ด์ฉ, ํ ์ด์คํ ํ๊ทธ๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค.
-
์ฌ๋ฌ ํค์๋ ์ ๋ ฅ ์ AND ์กฐ๊ฑด์ผ๋ก ๊ฒ์๋ฉ๋๋ค(๋ชจ๋ ํค์๋๋ฅผ ํฌํจํ๋ ๋ฆฌ๋ทฐ๋ง ๊ฒฐ๊ณผ์ ํ์).
keywords="keyword1"&keywords="keyword2"
- ํํ๋ก ์ฌ๋ฌ ํค์๋๋ฅผ ์
๋ ฅํ ์ ์๋ค.
์์ฒญ ํ๋ผ๋ฏธํฐ
$ curl 'https://api.bottle-note.com/api/v1/reviews/explore/standard?keywords=%ED%82%A4%EC%9B%8C%EB%93%9C1&keywords=%ED%82%A4%EC%9B%8C%EB%93%9C2&cursor=0&size=20' -i -X GET
GET /api/v1/reviews/explore/standard?keywords=%ED%82%A4%EC%9B%8C%EB%93%9C1&keywords=%ED%82%A4%EC%9B%8C%EB%93%9C2&cursor=0&size=20 HTTP/1.1
Host: api.bottle-note.com
| Parameter | Description |
|---|---|
|
๊ฒ์์ด ๋ชฉ๋ก (์์ฑ์, ์ ์ด๋ฆ, ๋ฆฌ๋ทฐ ๋ด์ฉ, ํ ์ด์คํ ํ๊ทธ์์ ๊ฒ์) |
|
์กฐํ ํ ์์ ๊ธฐ์ค ์์น |
|
์กฐํ ํ ํ์ด์ง ์ฌ์ด์ฆ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ ์ฒด ๋ฆฌ๋ทฐ ๋ฆฌ์คํธ์ ํฌ๊ธฐ |
|
|
์ฌ์ฉ์ ID |
|
|
์ฌ์ฉ์ ๋๋ค์ |
|
|
์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง URL |
|
|
๋ด๊ฐ ์์ฑํ ๋ฆฌ๋ทฐ ์ฌ๋ถ |
|
|
์ ID |
|
|
์ ์ด๋ฆ |
|
|
๋ฆฌ๋ทฐ ID |
|
|
๋ฆฌ๋ทฐ ๋ด์ฉ |
|
|
๋ฆฌ๋ทฐ ํ์ |
|
|
๋ฆฌ๋ทฐ ํ ์ด์คํ ํ๊ทธ ๋ชฉ๋ก |
|
|
๋ฆฌ๋ทฐ ์์ฑ ์๊ฐ |
|
|
๋ฆฌ๋ทฐ ์์ ์๊ฐ |
|
|
๋ฆฌ๋ทฐ ์ด๋ฏธ์ง ์ด ๊ฐ์ |
|
|
๋ฆฌ๋ทฐ ์ด๋ฏธ์ง URL ๋ชฉ๋ก |
|
|
๋ฒ ์คํธ ๋ฆฌ๋ทฐ ์ฌ๋ถ |
|
|
์ข์์ ์ |
|
|
๋ด๊ฐ ์ข์์ํ ๋ฆฌ๋ทฐ ์ฌ๋ถ |
|
|
๋๊ธ ์ |
|
|
๋ด๊ฐ ๋๊ธ์ ์์ฑํ ๋ฆฌ๋ทฐ ์ฌ๋ถ |
|
|
๊ฒ์์ด ์ ๋ณด |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
์กฐํ ์ ๊ธฐ์ค ์ปค์ |
|
|
๋ค์ ํ์ด์ง ์ปค์ |
|
|
์กฐํ๋ ํ์ด์ง ์ฌ์ด์ฆ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 500,
"items" : [ {
"userInfo" : {
"userId" : 1,
"nickName" : "์ฌ์ฉ์1",
"userProfileImage" : "https://example.com/profile1.jpg"
},
"isMyReview" : true,
"alcoholId" : 101,
"alcoholName" : "์๊ทธ๋ท ์์คํค 1",
"reviewId" : 1001,
"reviewContent" : "์ด ์์คํค๋ ์ ๋ง ๋ง์์ต๋๋ค. ๊ณผ์ผํฅ๊ณผ ์คํฌํฅ์ด ์ ๋ฌํ๊ฒ ์ด์ฐ๋ฌ์ ธ ์์ด์. 1",
"reviewRating" : 4.6,
"reviewTags" : [ "๋ฌ๋ฌํ", "๊ณผ์ผํฅ", "์คํฌํฅ" ],
"createAt" : [ 2026, 4, 7, 13, 53, 11, 51120519 ],
"modifiedAt" : [ 2026, 4, 8, 12, 53, 11, 51135787 ],
"totalImageCount" : 2,
"reviewImages" : [ "https://example.com/image1_1.jpg", "https://example.com/image1_2.jpg" ],
"isBestReview" : false,
"likeCount" : 10,
"isLikedByMe" : false,
"replyCount" : 5,
"hasReplyByMe" : true
}, {
"userInfo" : {
"userId" : 2,
"nickName" : "์ฌ์ฉ์2",
"userProfileImage" : "https://example.com/profile2.jpg"
},
"isMyReview" : false,
"alcoholId" : 102,
"alcoholName" : "์๊ทธ๋ท ์์คํค 2",
"reviewId" : 1002,
"reviewContent" : "์ด ์์คํค๋ ์ ๋ง ๋ง์์ต๋๋ค. ๊ณผ์ผํฅ๊ณผ ์คํฌํฅ์ด ์ ๋ฌํ๊ฒ ์ด์ฐ๋ฌ์ ธ ์์ด์. 2",
"reviewRating" : 4.7,
"reviewTags" : [ "๋ฌ๋ฌํ", "๊ณผ์ผํฅ", "์คํฌํฅ" ],
"createAt" : [ 2026, 4, 6, 13, 53, 11, 51186442 ],
"modifiedAt" : [ 2026, 4, 8, 11, 53, 11, 51194096 ],
"totalImageCount" : 2,
"reviewImages" : [ "https://example.com/image2_1.jpg", "https://example.com/image2_2.jpg" ],
"isBestReview" : true,
"likeCount" : 20,
"isLikedByMe" : false,
"replyCount" : 10,
"hasReplyByMe" : false
}, {
"userInfo" : {
"userId" : 3,
"nickName" : "์ฌ์ฉ์3",
"userProfileImage" : "https://example.com/profile3.jpg"
},
"isMyReview" : false,
"alcoholId" : 103,
"alcoholName" : "์๊ทธ๋ท ์์คํค 3",
"reviewId" : 1003,
"reviewContent" : "์ด ์์คํค๋ ์ ๋ง ๋ง์์ต๋๋ค. ๊ณผ์ผํฅ๊ณผ ์คํฌํฅ์ด ์ ๋ฌํ๊ฒ ์ด์ฐ๋ฌ์ ธ ์์ด์. 3",
"reviewRating" : 4.8,
"reviewTags" : [ "๋ฌ๋ฌํ", "๊ณผ์ผํฅ", "์คํฌํฅ" ],
"createAt" : [ 2026, 4, 5, 13, 53, 11, 51229553 ],
"modifiedAt" : [ 2026, 4, 8, 10, 53, 11, 51236095 ],
"totalImageCount" : 2,
"reviewImages" : [ "https://example.com/image3_1.jpg", "https://example.com/image3_2.jpg" ],
"isBestReview" : false,
"likeCount" : 30,
"isLikedByMe" : true,
"replyCount" : 15,
"hasReplyByMe" : false
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 11, 54412745 ],
"pageable" : {
"currentCursor" : 0,
"cursor" : 20,
"pageSize" : 20,
"hasNext" : true
},
"searchParameters" : {
"keywords" : [ "ํค์๋1", "ํค์๋2" ]
},
"serverPathVersion" : "v1"
}
}
7. ์ (alcohol) ๊ด๋ จ API
7.1. ์ (์์คํค) ๋ชฉ๋ก ์กฐํ
๊ฒ์ ์กฐ๊ฑด์ผ๋ก ์ (์์คํค) ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
๊ฒ์์ด๋ฅผ ํตํด ํํฐ๋ง ๊ฐ๋ฅํ ๋ด์ญ
-
์์คํค ์ด๋ฆ (ํ๊ธ/์๋ฌธ)
-
์นดํ ๊ณ ๋ฆฌ (ํ๊ธ/์๋ฌธ)
-
์ง์ญ (ํ๊ธ/์๋ฌธ)
-
ํ ์ด์คํ ํ๊ทธ (ํ๊ธ/์๋ฌธ)
-
ํ๋ ์ด์ ํค์๋ (์์ฆ๋ณ/์ํฉ๋ณ ์ถ์ฒ ๋ฑ)
-
ํ๋ ์ด์ ํค์๋๋ก ๊ฒ์ ์, ํด๋น ํ๋ ์ด์ ์ ํฌํจ๋ ์์คํค ๋ชฉ๋ก์ด ๋ฐํ๋ฉ๋๋ค
-
์:
๋ด ์ถ์ฒ ์์คํค,์ฌ๋ฆ ์ถ์ฒ ์์คํค,๋น ์ค๋ ๋ ์ถ์ฒ ์์คํค๋ฑ -
ํ๋ ์ด์ ํค์๋๋ ๋์ ์ผ๋ก ๊ด๋ฆฌ๋๋ฏ๋ก, ์๋ก์ด ํ๋ ์ด์ ์ด ์ถ๊ฐ๋๊ฑฐ๋ ๊ธฐ์กด ํ๋ ์ด์ ์ด ์์ ๋ ์ ์์ต๋๋ค
-
์ฌ์ฉ ๊ฐ๋ฅํ ํ๋ ์ด์ ํค์๋ ๋ชฉ๋ก์ ํ๋ ์ด์ ํค์๋ ์กฐํ API๋ฅผ ํตํด ํ์ธํ ์ ์์ต๋๋ค
-
ํน์ ํ๋ ์ด์ ์ ์์คํค๋ง ์กฐํํ๋ ค๋ฉด ํ๋ ์ด์ ์์คํค ๋ชฉ๋ก ์กฐํ API๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค
-
์์ฒญ ํ๋ผ๋ฏธํฐ
$ http GET 'https://api.bottle-note.com/api/v1/alcohols/search?keyword=glen&category=SINGLE_MALT®ionId=1&sortType=REVIEW&sortOrder=DESC&cursor=0&pageSize=3'
| Parameter | Description |
|---|---|
|
๊ฒ์์ด (์์ฝ์ฌ ์ด๋ฆ, ์นดํ ๊ณ ๋ฆฌ, ํ์คํ ํ๊ทธ๋ก ๊ฒ์) - ์ฌ๋ฌ ๋จ์ด ์ ๋ ฅ ์ ๋์ด์ฐ๊ธฐ๋ก ๊ตฌ๋ถํ์ฌ AND ๊ฒ์ - ์: '์กฐ๋ ๋ธ๋' โ '์กฐ๋’์ '๋ธ๋' ๋ชจ๋ ํฌํจ๋ ๊ฒฐ๊ณผ |
|
ํ๋ ์ด์ ID (ํน์ ํ๋ ์ด์ ์ ํฌํจ๋ ์์ฝ์ฌ๋ง ํํฐ๋ง) - keyword์ ํจ๊ป ์ฌ์ฉ ์ curationId๊ฐ ์ฐ์ ์ ์ฉ - ํ๋ ์ด์ ๋ชฉ๋ก์ /api/v1/curations API์์ ์กฐํ ๊ฐ๋ฅ |
|
์นดํ ๊ณ ๋ฆฌ ํํฐ (category API ์ฐธ์กฐ) - ์: SINGLE_MALT, BLEND ๋ฑ |
|
์ง์ญ ID ํํฐ (region API ์ฐธ์กฐ) - ์: 1=์ค์ฝํ๋๋, 2=์์ผ๋๋ ๋ฑ |
|
์ ๋ ฌ ํ์ (๊ธฐ๋ณธ๊ฐ: POPULAR) - POPULAR: ์ธ๊ธฐ์ - REVIEW: ๋ฆฌ๋ทฐ ๋ง์ ์ - RATING: ํ์ ๋์ ์ |
|
์ ๋ ฌ ์์ (๊ธฐ๋ณธ๊ฐ: DESC) - DESC: ๋ด๋ฆผ์ฐจ์ - ASC: ์ค๋ฆ์ฐจ์ |
|
์ปค์ ํ์ด์ง๋ค์ด์ ์์ ์์น (๊ธฐ๋ณธ๊ฐ: 0) - ๋ค์ ํ์ด์ง ์กฐํ ์ ์ด์ ์๋ต์ cursor ๊ฐ ์ฌ์ฉ |
|
ํ์ด์ง ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ: 10) - ํ ๋ฒ์ ์กฐํํ ์์ดํ ๊ฐ์ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ ์ฒด ์ ๋ฆฌ์คํธ์ ํฌ๊ธฐ |
|
|
์ ID |
|
|
์ ์ด๋ฏธ์ง URL |
|
|
์ ํ๊ธ ์ด๋ฆ |
|
|
์ ์๋ฌธ ์ด๋ฆ |
|
|
์ ํ๊ธ ์นดํ ๊ณ ๋ฆฌ ์ด๋ฆ |
|
|
์ ์๋ฌธ ์นดํ ๊ณ ๋ฆฌ ์ด๋ฆ |
|
|
์ ํ์ |
|
|
์ ํ์ ๊ฐ์ |
|
|
์ ๋ฆฌ๋ทฐ ๊ฐ์ |
|
|
์ ์ฐ ๊ฐ์ |
|
|
์ ์ฐ ์ฌ๋ถ |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
์กฐํ ์ ๊ธฐ์ค ์ปค์ |
|
|
๋ค์ ํ์ด์ง ์ปค์ |
|
|
์กฐํ๋ ํ์ด์ง ์ฌ์ด์ฆ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
|
|
๊ฒ์ ์ ์ฌ์ฉ๋ ๊ฒ์์ด (์ ๋ ฅ๊ฐ ๊ทธ๋๋ก ๋ฐํ) |
|
|
๊ฒ์ ์ ์ฌ์ฉ๋ ํ๋ ์ด์ ID (์ ๋ ฅ๊ฐ ๊ทธ๋๋ก ๋ฐํ) |
|
|
๊ฒ์ ์ ์ฌ์ฉ๋ ์นดํ ๊ณ ๋ฆฌ ํํฐ |
|
|
๊ฒ์ ์ ์ฌ์ฉ๋ ์ง์ญ ID ํํฐ |
|
|
๊ฒ์ ์ ์ฌ์ฉ๋ ์ ๋ ฌ ํ์ |
|
|
๊ฒ์ ์ ์ฌ์ฉ๋ ์ ๋ ฌ ์์ |
|
|
๊ฒ์ ์ ์ฌ์ฉ๋ ์ปค์ ์์น |
|
|
๊ฒ์ ์ ์ฌ์ฉ๋ ํ์ด์ง ํฌ๊ธฐ |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 5,
"alcohols" : [ {
"alcoholId" : 5,
"korName" : "์๋
น 24๋
",
"engName" : "anCnoc 24-year-old",
"korCategoryName" : "์ฑ๊ธ ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"imageUrl" : "https://static.whiskybase.com/storage/whiskies/6/6/989/270671-big.jpg",
"rating" : 4.5,
"ratingCount" : 1,
"reviewCount" : 0,
"pickCount" : 1,
"isPicked" : false
}, {
"alcoholId" : 1,
"korName" : "๊ธ๋์ค๊ณ 1770 ์ฑ๊ธ๋ชฐํธ ์ค์นด์น ์์คํค",
"engName" : "1770 Glasgow Single Malt",
"korCategoryName" : "์ฑ๊ธ ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"imageUrl" : "https://static.whiskybase.com/storage/whiskies/2/0/8916/404538-big.jpg",
"rating" : 3.5,
"ratingCount" : 3,
"reviewCount" : 1,
"pickCount" : 1,
"isPicked" : true
}, {
"alcoholId" : 2,
"korName" : "๊ธ๋์ค๊ณ 1770 ์ฑ๊ธ๋ชฐํธ ์ค์นด์น ์์คํค",
"engName" : "1770 Glasgow Single Malt",
"korCategoryName" : "์ฑ๊ธ ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"imageUrl" : "https://static.whiskybase.com/storage/whiskies/2/0/8888/404535-big.jpg",
"rating" : 3.5,
"ratingCount" : 1,
"reviewCount" : 0,
"pickCount" : 1,
"isPicked" : true
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 8, 807473955 ],
"pageable" : {
"currentCursor" : 0,
"cursor" : 4,
"pageSize" : 3,
"hasNext" : true
},
"searchParameters" : {
"keyword" : "glen",
"curationId" : null,
"category" : "SINGLE_MALT",
"regionId" : 1,
"sortType" : "REVIEW",
"sortOrder" : "DESC",
"cursor" : 0,
"pageSize" : 3
},
"serverPathVersion" : "v1"
}
}
์ ๋ ฌ ํ์ (sortType)
POPULAR |
์ธ๊ธฐ์ |
RATING |
๋ณ์ ์ |
PICK |
์ฐ์ |
REVIEW |
๋ฆฌ๋ทฐ์ |
-
ํด๋น ๊ฐ์ด ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ POPULAR ์ ๋๋ค.
-
ํ์ ์ด ์๋ชป ์ ๋ฌ๋ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐํ๋ฉ๋๋ค.
์ ๋ ฌ ๋ฐฉํฅ (sortOrder)
-
ํด๋น ์ ์๋ ์ ๋ ฌ ๋ฐฉํฅ์ ๋ํ๋ด๋ ๊ฐ์ ๋๋ค.
-
์๋น์ค์ ๋ชจ๋ ์ ๋ ฌ ๊ด๋ จ API์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
DESC |
๋ด๋ฆผ์ฐจ์ |
5 → 3 → 2 → 1 |
ASC |
์ค๋ฆ์ฐจ์ |
1 → 2 → 3 → 5 |
-
๋๋ค์ ๊ฒฝ์ฐ ์ ๋ ฌ ํ์ ์ ๋ฐ๋ผ ์๋์ ๋ค๋ฅด๊ฒ ๋์ ํ ์ ์์ต๋๋ค.
-
ํด๋น ๊ฐ์ด ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ DESC(๋ด๋ฆผ์ฐจ์) ์ ๋๋ค.
-
ํ์ ์ด ์๋ชป ์ ๋ฌ๋ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐํ๋ฉ๋๋ค.
7.2. ์ (์์คํค) ์์ธ ์กฐํ
๊ฒ์ ์กฐ๊ฑด์ผ๋ก ์ (์์คํค) ์ ๋ณด๋ฅผ ์์ธ ์กฐํํฉ๋๋ค.
๋ ธ์ถ๋๋ ๊ฐ์ด ๋งค์ฐ ๋ง๊ณ ๋ณต์กํ๋ค ๋ณด๋ ์์ ์ฌํญ์ด ๋ฐ์ ์ ๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธํ๋๋ฐ ์๊ฐ์ด ์์๋ ์ ์์ต๋๋ค.
์ถ๊ฐ์ ์ธ ์ ๋ณด๊ฐ ํ์ํ์ ๊ฒฝ์ฐ, ๋ฌธ์ํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
์์ฒญ ํ๋ผ๋ฏธํฐ
GET /api/v1/alcohols/{alcoholsId}
-
alcoholsId: ์กฐํํ ์ (์์คํค)์ ID
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ ID |
|
|
์ ์ด๋ฏธ์ง URL |
|
|
์ ์ ํ๊ตญ์ด ์ด๋ฆ |
|
|
์ ์ ์์ด ์ด๋ฆ |
|
|
์ ์ ํ๊ตญ์ด ์นดํ ๊ณ ๋ฆฌ |
|
|
์ ์ ์์ด ์นดํ ๊ณ ๋ฆฌ |
|
|
์ ์ ํ๊ตญ์ด ์ง์ญ |
|
|
์ ์ ์์ด ์ง์ญ |
|
|
์ ์ ์์ฑ ์บ์คํฌ ์ ๋ณด |
|
|
์ ์ ๋์ |
|
|
์ ์ ์กฐ์ฌ์ ํ๊ตญ์ด ์ด๋ฆ |
|
|
์ ์ ์กฐ์ฌ์ ์์ด ์ด๋ฆ |
|
|
์ ์ ํ๊ท ํ์ |
|
|
์ด ํ์ ์ฐธ์ฌ์ ์ |
|
|
๋ด๊ฐ ์ค ํ์ |
|
|
๋ด๊ฐ ์ง๊ธ๊น์ง ์ค ํ๊ท ํ์ (๋ฆฌ๋ทฐ์ ๋ณ์ ์ ๊ธฐ๋ฐ) |
|
|
๋ด๊ฐ ์ข์์ํ ์ ์ธ์ง ์ฌ๋ถ |
|
|
์ ์ ํ๊ทธ ๋ชฉ๋ก |
|
|
ํ๋ก์ ์ |
|
|
์น๊ตฌ์ ํ๋กํ ์ด๋ฏธ์ง URL |
|
|
์น๊ตฌ์ ์ฌ์ฉ์ ID |
|
|
์น๊ตฌ์ ๋๋ค์ |
|
|
์น๊ตฌ์ ํ์ |
|
|
ํด๋น ์ ์ ์ด ๋ฆฌ๋ทฐ ์ |
|
|
๋ฆฌ๋ทฐ ID |
|
|
๋ฆฌ๋ทฐ ๋ด์ฉ |
|
|
๋ฆฌ๋ทฐ ๊ฐ๊ฒฉ |
|
|
๋ฆฌ๋ทฐ ์ฌ์ด์ฆ ํ์ |
|
|
๋ฆฌ๋ทฐ ์ข์์ ์ |
|
|
๋ฆฌ๋ทฐ ๋๊ธ ์ |
|
|
๋ฆฌ๋ทฐ ์ด๋ฏธ์ง URL |
|
|
๋ฆฌ๋ทฐ ์ด๋ฏธ์ง ์ด๊ฐ์ |
|
|
๋ฆฌ๋ทฐ ์์ฑ์ ID |
|
|
๋ฆฌ๋ทฐ ์์ฑ์ ๋๋ค์ |
|
|
๋ฆฌ๋ทฐ ์์ฑ์ ํ๋กํ ์ด๋ฏธ์ง URL |
|
|
๋ฆฌ๋ทฐ ํ์ |
|
|
๋ฆฌ๋ทฐ ์กฐํ์ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์ ๋ณด |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ๋ช |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์ฐํธ๋ฒํธ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์ฃผ์ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์์ธ ์ฃผ์ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์นดํ ๊ณ ๋ฆฌ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์ง๋ URL |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์๋ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ๊ฒฝ๋ |
|
|
๋ฆฌ๋ทฐ ๊ณต๊ฐ ์ฌ๋ถ (PUBLIC/PRIVATE) |
|
|
๋ด๊ฐ ์์ฑํ ๋ฆฌ๋ทฐ์ธ์ง ์ฌ๋ถ |
|
|
๋ด๊ฐ ์ข์์๋ฅผ ๋๋ ๋์ง ์ฌ๋ถ |
|
|
๋ด๊ฐ ๋๊ธ์ ๋ฌ์๋์ง ์ฌ๋ถ |
|
|
๋ฒ ์คํธ ๋ฆฌ๋ทฐ ์ฌ๋ถ |
|
|
๋ฆฌ๋ทฐ ํ ์ด์คํ ํ๊ทธ ๋ชฉ๋ก |
|
|
๋ฆฌ๋ทฐ ์์ฑ ๋ ์ง 'yyyyMMddHHmm' ํฌ๋งท |
{
"success" : true,
"code" : 200,
"data" : {
"alcohols" : {
"alcoholId" : 42,
"alcoholUrlImg" : "https://static.whiskybase.com/storage/whiskies/42/404542-big.jpg",
"korName" : "๊ธ๋ ํผ๋ 20๋
๋๋ธ ์บ์คํฌ ์์คํค",
"engName" : "Glenfiddich 20 Years Double Cask",
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "Single Malt",
"korRegion" : "์ค์ฝํ๋๋/ํ์ด๋๋",
"engRegion" : "Scotland/Highlands",
"cask" : "Ex-Bourbon Casks",
"abv" : "42",
"korDistillery" : "๊ธ๋ ํผ๋ ๋์คํธ๋ฌ๋ฆฌ",
"engDistillery" : "Glenfiddich Distillery",
"rating" : 3.5,
"totalRatingsCount" : 778,
"myRating" : 5.0,
"myAvgRating" : 2.0,
"isPicked" : true,
"alcoholsTastingTags" : [ "๋ฌ๋ฌํ", "๋ฐ๋๋ผ", "ํ์ถํฅ์" ]
},
"friendsInfo" : {
"followerCount" : 6,
"friends" : [ {
"userImageUrl" : "https://picsum.photos/600/600",
"userId" : 1,
"nickName" : "๋์์ฝ๋ผ๋ฆฌ",
"rating" : 4.5
}, {
"userImageUrl" : "https://picsum.photos/600/600",
"userId" : 2,
"nickName" : "๋๋ฌด์ฌ์",
"rating" : 1.5
}, {
"userImageUrl" : "https://picsum.photos/600/600",
"userId" : 3,
"nickName" : "ํผ์ํ์ธ์ ํ",
"rating" : 3.0
}, {
"userImageUrl" : "https://picsum.photos/600/600",
"userId" : 4,
"nickName" : "๋ฉํ ์ค",
"rating" : 0.5
}, {
"userImageUrl" : "https://picsum.photos/600/600",
"userId" : 5,
"nickName" : "๋ฏผํธ๋ง์นํ ์ค",
"rating" : 5.0
}, {
"userImageUrl" : "https://picsum.photos/600/600",
"userId" : 6,
"nickName" : "๋ชฉ๋ฐ์ดํฐ",
"rating" : 1.0
} ]
},
"reviewInfo" : {
"totalCount" : 2,
"reviewList" : [ {
"reviewId" : 0,
"reviewContent" : "์ข์ ๋ฆฌ๋ทฐ์
๋๋ค (qCxdGFQlqb)",
"reviewImageUrl" : "https://example.com/review-image.jpg",
"createAt" : [ 2026, 4, 8, 13, 53, 8, 912395776 ],
"totalImageCount" : null,
"userInfo" : {
"userId" : 1,
"nickName" : "ํ๊ธธ๋",
"userProfileImage" : "https://example.com/profile.jpg"
},
"isMyReview" : true,
"status" : "PUBLIC",
"isBestReview" : false,
"locationInfo" : {
"name" : "๋์์ ",
"zipCode" : null,
"address" : "์์ธ ์กํ๊ตฌ ์กํ๋๋ก 145",
"detailAddress" : "2์ธต ๋์์ ",
"category" : "์์์ > ์ ์ง > ์นตํ
์ผ๋ฐ",
"mapUrl" : "https://place.map.kakao.com/2088591613",
"latitude" : "37.4835934678036",
"longitude" : "127.122831408454"
},
"sizeType" : "BOTTLE",
"price" : 100000,
"rating" : 4.5,
"likeCount" : 10,
"replyCount" : 2,
"isLikedByMe" : false,
"hasReplyByMe" : true,
"viewCount" : 0,
"tastingTagList" : [ "๊ณผ์ผํฅ", "๋ถ๋๋ฌ์" ]
}, {
"reviewId" : 1,
"reviewContent" : "์ข์ ๋ฆฌ๋ทฐ์
๋๋ค (wiOpzrTmFJ)",
"reviewImageUrl" : "https://example.com/review-image.jpg",
"createAt" : [ 2026, 4, 8, 13, 53, 8, 912467059 ],
"totalImageCount" : null,
"userInfo" : {
"userId" : 1,
"nickName" : "ํ๊ธธ๋",
"userProfileImage" : "https://example.com/profile.jpg"
},
"isMyReview" : true,
"status" : "PUBLIC",
"isBestReview" : false,
"locationInfo" : {
"name" : "๋์์ ",
"zipCode" : null,
"address" : "์์ธ ์กํ๊ตฌ ์กํ๋๋ก 145",
"detailAddress" : "2์ธต ๋์์ ",
"category" : "์์์ > ์ ์ง > ์นตํ
์ผ๋ฐ",
"mapUrl" : "https://place.map.kakao.com/2088591613",
"latitude" : "37.4835934678036",
"longitude" : "127.122831408454"
},
"sizeType" : "BOTTLE",
"price" : 100000,
"rating" : 4.5,
"likeCount" : 10,
"replyCount" : 2,
"isLikedByMe" : false,
"hasReplyByMe" : true,
"viewCount" : 0,
"tastingTagList" : [ "๊ณผ์ผํฅ", "๋ถ๋๋ฌ์" ]
} ]
}
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 8, 914952266 ],
"serverPathVersion" : "v1"
}
}
-
Boolean ์ฌ๋ถ๋ header์ bearer ํ ํฐ์ ์ฐธ์กฐํด ํ์ธํฉ๋๋ค.
Authorization: Bearer {token} -
๋ณ์๋ช ์์ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ, ๋ฌธ์ํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
7.3. ์ (์์คํค) ์ฐํ๊ธฐ /์ฐํ๊ธฐ ํด์
์ (์์คํค)์ ์๋ณ์์ ์กฐ๊ฑด๊ฐ์ ํตํด ์ฐํ๊ธฐ/์ฐํ๊ธฐ ํด์ ๋ฅผ ํฉ๋๋ค.
ํ๋จ ์์๋ฅผ ํตํด ์ฐํ๊ธฐ์ ์ฐํ๊ธฐ ํด์ ๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
PUT apv/v1/picks
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
์ฐ ํ ์ (์์คํค)์ ์๋ณ์ |
|
|
|
์ฐ ์ฌ๋ถ (ํ๋จ Picks Status ์ฐธ์กฐ) |
{
"alcoholId" : 1,
"isPicked" : "PICK"
}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์ ๋ฐ์ดํธ๋ ์ฐ ์ํ |
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ๊ฐ false์ผ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง(์์ ๊ฒฝ์ฐ null) |
{
"success" : true,
"code" : 200,
"data" : {
"message" : "์ ์์ ์ผ๋ก ์ฐํ๊ธฐ ์ฒ๋ฆฌ ๋์์ต๋๋ค.",
"status" : "PICK"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 10, 344285923 ],
"serverPathVersion" : "v1"
}
}
Picks Status
| ์ฝ๋ | ์ค๋ช |
|---|---|
PICK |
์ฐ ํ๊ธฐ |
UNPICK |
์ฐํ๊ธฐ ํด์ |
Error code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
ALCOHOL_ID_REQUIRED |
BAD_REQUEST |
์์ฝ์ฌ ์๋ณ์๋ ํ์์ ๋๋ค. |
ALCOHOL_ID_MINIMUM |
BAD_REQUEST |
์์ฝ์ฌ ์๋ณ์๋ ์ต์ 1 ์ด์ ์ด์ด์ผ ํฉ๋๋ค. |
IS_PICKED_REQUIRED |
BAD_REQUEST |
์ฐํ๊ธฐ ์ฌ๋ถ๋ ํ์์ ๋๋ค. |
USER_NOT_FOUND |
NOT_FOUND |
์ ์ ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. |
7.4. ์ง์ญ(๋ฆฌ์ ) ์ ๋ณด ์กฐํ
๊ฒ์ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ๋๋ ์ง์ญ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
์ง์ญ ์ ๋ณด๋ ์๋ฒ์ ๋ก์ปฌ ์บ์๋ก ๊ด๋ฆฌ๋๋ฉฐ ์ผ ๋จ์๋ก ๊ฐฑ์ ๋ฉ๋๋ค.
GET /api/v1/regions
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ง์ญ ID |
|
|
์ง์ญ ํ๊ธ๋ช |
|
|
์ง์ญ ์ด๋ฆ |
|
|
์ง์ญ ์ค๋ช |
|
|
์์ ์ง์ญ ID |
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ๊ฐ false์ผ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง(์์ ๊ฒฝ์ฐ null) |
{
"success" : true,
"code" : 200,
"data" : [ {
"regionId" : 1,
"korName" : "์ค์ฝํ๋๋/๋ก์ฐ๋๋",
"engName" : "Scotland/Lowlands",
"description" : "๊ฐ๋ฒผ์ด ๋ง์ด ํน์ง์ธ ๋ก์ฐ๋๋ ์์คํค",
"parentId" : 19
}, {
"regionId" : 2,
"korName" : "์ค์ฝํ๋๋/ํ์ด๋๋",
"engName" : "Scotland/Highlands",
"description" : "๋ง์ ๋ค์์ฑ์ด ํน์ง์ธ ํ์ด๋๋ ์์คํค, ํด์์ ์ง ๋ง๋ถํฐ ๋ฌ์ฝคํ๊ณ ๊ณผ์ผ ๋ง๊น์ง",
"parentId" : 19
}, {
"regionId" : 3,
"korName" : "์ค์ฝํ๋๋/์์ผ๋๋",
"engName" : "Scotland/Ireland",
"description" : "๋ถ๋๋ฌ์ด ๋ง์ด ํน์ง์ธ ์์ผ๋๋ ์์คํค",
"parentId" : 19
}, {
"regionId" : 11,
"korName" : "ํ๋์ค",
"engName" : "France",
"description" : "์ฃผ๋ก ๋ธ๋๋์ ์์ธ ์์ฐ์ง๋ก ์ ๋ช
ํ์ง๋ง ์์คํค๋ ์์ฐ",
"parentId" : null
}, {
"regionId" : 12,
"korName" : "์ค์จ๋ด",
"engName" : "Sweden",
"description" : "์คํ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋ง๋๋ ์ค์จ๋ด ์์คํค",
"parentId" : null
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 9, 496791253 ],
"serverPathVersion" : "v1"
}
}
7.5. ์นดํ ๊ณ ๋ฆฌ ๋ชฉ๋ก ์กฐํ
์นดํ ๊ณ ๋ฆฌ ๋ชฉ๋ก์ ์กฐํํ ์ ์์ต๋๋ค.
ํด๋น ๊ธฐ๋ฅ์ ํ๋ก ํธ ๊ฐ๋ฐ ์ ์ฌ์ฉ๋๋ ์นดํ ๊ณ ๋ฆฌ ๊ฐ์ ๊ฒ์ฆํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
-
๊ฒ์์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ๋๋ ์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน ์ ๋ณด๋ ์ตํ๋จ ํ ์ด๋ธ์ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
-
DB ์ ์ ์ฅ๋์ด ๊ด๋ฆฌ๋๋ ์นดํ ๊ณ ๋ฆฌ์ ๊ฒ์ ์กฐ๊ฑด์ผ๋ก ๊ด๋ฆฌ๋๋ ์นดํ ๊ณ ๋ฆฌ๋ ๋ณ๋๋ก ๊ด๋ฆฌ๋ฉ๋๋ค.
-
์๋ฅผ ๋ค์ด `Spirit`๋ผ๋ ์นดํ ๊ณ ๋ฆฌ ๋ช ์ ์กด์ฌ ํ๊ณ ๋ ธ์ถ๋ ๋์ง๋ง ๊ฒ์ ์กฐ๊ฑด์ผ๋ก๋ `ETC`๋ผ๋ ์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน์ ํฌํจ๋ฉ๋๋ค.
-
์ด๋ ์ถํ ํ์ฅ๋ ์ฌ์ง๊ฐ ์์ต๋๋ค.
์์ฒญ ํ๋ผ๋ฏธํฐ
GET /api/v1/alcohols/categories?type=WHISKY HTTP/1.1
Host: api.bottle-note.com
| Parameter | Description |
|---|---|
|
์นดํ ๊ณ ๋ฆฌ ํ์ (ํด๋น ๋ฌธ์ ํ๋จ enum ์ฐธ์กฐ) |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์นดํ ๊ณ ๋ฆฌ ํ๊ธ ์ด๋ฆ |
|
|
์นดํ ๊ณ ๋ฆฌ ์์ด ์ด๋ฆ |
|
|
์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน (์นดํ ๊ณ ๋ฆฌ ๊ฒ์ ์กฐ๊ฑด ์ฌ์ฉ ์ ์ฌ์ฉ) |
{
"success" : true,
"code" : 200,
"data" : [ {
"korCategory" : "SINGLE_MOLT",
"engCategory" : "์ฑ๊ธ ๋ชฐํธ",
"categoryGroup" : "SINGLE_MALT"
}, {
"korCategory" : "BLENDED",
"engCategory" : "๋ธ๋ ๋๋",
"categoryGroup" : "BLEND"
}, {
"korCategory" : "BOURBON",
"engCategory" : "๋ฒ๋ฒ",
"categoryGroup" : "BOURBON"
}, {
"korCategory" : "RYE",
"engCategory" : "๋ผ์ด",
"categoryGroup" : "RYE"
}, {
"korCategory" : "OTHER",
"engCategory" : "๊ธฐํ",
"categoryGroup" : "OTHER"
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 9, 532099765 ],
"serverPathVersion" : "v1"
}
}
-
์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃบ์ ์ค์ ๊ฒ์์ ์ฌ์ฉ ๋๋ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ ๋๋ ๊ฐ ์ ๋๋ค.
-
์์ฝ์ฌ์ ๊ฒ์ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ๋๋ ์กฐ๊ฑด์ ์๋์ ํ๋ฅผ ์ฐธ์กฐํ์ธ์.
-
'_' ๊ธฐํธ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ํด๋น ๊ธฐํธ ๋๋ฝ ์ ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
์นดํ ๊ณ ๋ฆฌ ๊ฒ์ ์กฐ๊ฑด
| ์๋ฌธ | ํ๊ธ |
|---|---|
SINGLE_MALT |
์ฑ๊ธ๋ชฐํธ ์์คํค |
BLEND |
๋ธ๋ ๋๋ ์์คํค |
BLENDED_MALT |
๋ธ๋ ๋๋ ๋ชฐํธ ์์คํค |
BOURBON |
๋ฒ๋ฒ ์์คํค |
RYE |
๋ผ์ด ์์คํค |
OTHER |
๊ธฐํ ์์คํค |
-
์์คํค๋ฅผ ์ ์ธํ ์ ์ ์ข ๋ฅ ๊ฒ์ ์ ์ฌ์ฉ๋๋ ์กฐ๊ฑด ๊ฐ์ ๋๋ค.
-
ํ์ฌ๋ก์๋ ์์คํค๋ง ๊ฒ์ ๊ฐ๋ฅํฉ๋๋ค.
์นดํ ๊ณ ๋ฆฌ ๊ทธ๋ฃน ์กฐ๊ฑด
| ์๋ฌธ | ํ๊ธ |
|---|---|
WHISKY |
์์คํค (๊ธฐ๋ณธ๊ฐ) |
RUM |
๋ผ |
VODKA |
๋ณด๋์นด |
GIN |
์ง |
TEQUILA |
๋ฐํฌ๋ผ |
BRANDY |
๋ธ๋๋ |
BEER |
๋งฅ์ฃผ |
WINE |
์์ธ |
ETC |
๊ธฐํ |
7.6. ํ๋ ์ด์ ํค์๋ ์กฐํ
ํ๋ ์ด์ ํค์๋๋ ํน์ ์ฃผ์ ๋ ์ํฉ์ ๋ง๋ ์์คํค๋ฅผ ๋ชจ์๋์ ์ปฌ๋ ์ ์ ๋๋ค.
์๋ฅผ ๋ค์ด "๋ด ์ถ์ฒ ์์คํค"๋ผ๋ ํ๋ ์ด์ ์ ๋ด์ฒ ์ ์ด์ธ๋ฆฌ๋ ์์คํค๋ค์ ๋ฏธ๋ฆฌ ์ ์ ํด๋ ๋ชฉ๋ก์ด๋ฉฐ, "๋น ์ค๋ ๋ ์ถ์ฒ ์์คํค"๋ ๋น์ค๋ ๋ ๋ถ์๊ธฐ์ ๋ง๋ ์์คํค๋ค์ ๋ชจ์๋์ ์ปฌ๋ ์ ์ ๋๋ค.
๊ธฐ์กด์๋ ์์ฆ๋ณ ์ถ์ฒ ํค์๋(๋ด/์ฌ๋ฆ/๊ฐ์/๊ฒจ์ธ/๋น์ค๋๋ )๊ฐ ์ฝ๋์ ๊ณ ์ ๋์ด ์์์ง๋ง, ์ด์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋์ ์ผ๋ก ๊ด๋ฆฌ๋์ด ์๋ก์ด ํ๋ ์ด์ ์ ์์ ๋กญ๊ฒ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ์ ์์ต๋๋ค.
๊ฐ ํ๋ ์ด์ ์ ์ด๋ฆ, ์ค๋ช ๊ณผ ํจ๊ป ์ปค๋ฒ ์ด๋ฏธ์ง(coverImageUrl)๋ฅผ ๊ฐ์ง๊ณ ์์ด ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ธ UI ๊ตฌ์ฑ์ด ๊ฐ๋ฅํฉ๋๋ค.
|
์ปค๋ฒ ์ด๋ฏธ์ง ๊ถ์ฅ ๊ท๊ฒฉ 16:9 ์์ด๋ ๋น์จ (์: 800x450px ๋๋ 1600x900px)์ ๊ถ์ฅํฉ๋๋ค. ์์คํค ๋ณ์ด๋ ๋ถ์๊ธฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํํํ ์ ์์ผ๋ฉฐ, ๋ฐ์คํฌํฑ๊ณผ ๋ชจ๋ฐ์ผ ํ๊ฒฝ ๋ชจ๋์ ์ ํฉํฉ๋๋ค. |
GET /api/v1/curations
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ํค์๋ ์ด๋ฆ ๊ฒ์ (๋ถ๋ถ ์ผ์น) |
|
์์คํค ์๋ณ์๋ก ๊ฒ์ - ํด๋น ID์ ์์คํค๊ฐ ํฌํจ๋ ํ๋ ์ด์ ์กฐํ (์: alcoholId=123 ๊ฒ์ ์ ID๊ฐ 123์ธ ์์คํค๊ฐ ํฌํจ๋ ๋ชจ๋ ํ๋ ์ด์ ๋ฐํ) |
|
์ปค์ ํ์ด์ง (๊ธฐ๋ณธ๊ฐ: 0) |
|
ํ์ด์ง ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ: 10) |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์๋ต ๋ฐ์ดํฐ |
|
|
ํ๋ ์ด์ ํค์๋ ๋ชฉ๋ก |
|
|
ํ๋ ์ด์ ID |
|
|
ํ๋ ์ด์ ์ด๋ฆ |
|
|
ํ๋ ์ด์ ์ค๋ช |
|
|
ํ๋ ์ด์ ์ปค๋ฒ ์ด๋ฏธ์ง URL |
|
|
ํฌํจ๋ ์์คํค ๊ฐ์ |
|
|
๋ ธ์ถ ์์ |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
ํ์ฌ ์ปค์ |
|
|
๋ค์ ์ปค์ |
|
|
ํ์ด์ง ํฌ๊ธฐ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
|
|
๋ฉํ ์ ๋ณด |
|
|
์๋ฒ ๋ฒ์ |
|
|
์๋ฒ ์ธ์ฝ๋ฉ |
|
|
์๋ต ์๊ฐ |
|
|
API ๊ฒฝ๋ก ๋ฒ์ |
|
|
์๋ฌ ์ ๋ณด |
์๋ต ์์
{
"success" : true,
"code" : 200,
"data" : {
"items" : [ {
"id" : 1,
"name" : "๋ด ์ถ์ฒ ์์คํค",
"description" : "๋ด์ ์ด์ธ๋ฆฌ๋ ์์คํค ๋ชจ์",
"coverImageUrl" : "https://example.com/spring-whisky.jpg",
"alcoholCount" : 10,
"displayOrder" : 1
}, {
"id" : 2,
"name" : "์ฌ๋ฆ ์ถ์ฒ ์์คํค",
"description" : "์ฌ๋ฆ์ ์ด์ธ๋ฆฌ๋ ์์คํค ๋ชจ์",
"coverImageUrl" : "https://example.com/summer-whisky.jpg",
"alcoholCount" : 8,
"displayOrder" : 2
} ],
"pageable" : {
"currentCursor" : 0,
"cursor" : 10,
"pageSize" : 10,
"hasNext" : false
}
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 9, 150945785 ],
"serverPathVersion" : "v1"
}
}
์ฌ์ฉ ์์
-
์ ์ฒด ํ๋ ์ด์ ๋ชฉ๋ก ์กฐํ
GET /api/v1/curations?cursor=0&pageSize=10๋ด/์ฌ๋ฆ/๊ฐ์/๊ฒจ์ธ ์ถ์ฒ ์์คํค ๋ฑ ๋ชจ๋ ํ๋ ์ด์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค.
-
ํน์ ํค์๋๋ก ๊ฒ์
GET /api/v1/curations?keyword=๋ด&cursor=0&pageSize=10"๋ด"์ด๋ผ๋ ํค์๋๊ฐ ํฌํจ๋ ํ๋ ์ด์ ๋ง ํํฐ๋งํ์ฌ ์กฐํํฉ๋๋ค.
-
ํน์ ์์คํค๊ฐ ํฌํจ๋ ํ๋ ์ด์ ๊ฒ์
GET /api/v1/curations?alcoholId=123&cursor=0&pageSize=10ID๊ฐ 123์ธ ์์คํค๊ฐ ํฌํจ๋ ๋ชจ๋ ํ๋ ์ด์ ์ ์กฐํํฉ๋๋ค. ์๋ฅผ ๋ค์ด "๊ธ๋ ํผ๋ 15๋ "์ด "๋ด ์ถ์ฒ ์์คํค"์ "๋น์ค๋ ๋ ์ถ์ฒ ์์คํค"์ ๋ชจ๋ ํฌํจ๋์ด ์๋ค๋ฉด ๋ ํ๋ ์ด์ ์ด ๋ชจ๋ ๋ฐํ๋ฉ๋๋ค.
7.7. ํ๋ ์ด์ ์์คํค ๋ชฉ๋ก ์กฐํ
ํน์ ํ๋ ์ด์ ์ ํฌํจ๋ ์์คํค ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค.
ํ๋ ์ด์ ๋ชฉ๋ก ์กฐํ API์์ ๋ฐ์ ํ๋ ์ด์ ID๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ํ๋ ์ด์ ์ ์ํ ์์คํค๋ค์ ์์ธ ์ ๋ณด(ํ์ , ๋ฆฌ๋ทฐ ์, ์ฐ ํ์ ๋ฑ)๋ฅผ ํจ๊ป ์กฐํํ ์ ์์ต๋๋ค.
GET /api/v1/curations/{curationId}/alcohols
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ ์ด์ ID |
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์ปค์ ํ์ด์ง (๊ธฐ๋ณธ๊ฐ: 0) |
|
ํ์ด์ง ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ: 10) |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์๋ต ๋ฐ์ดํฐ |
|
|
์์คํค ๋ชฉ๋ก |
|
|
์์คํค ID |
|
|
์์คํค ํ๊ธ๋ช |
|
|
์์คํค ์๋ฌธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ํ๊ธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ์๋ฌธ๋ช |
|
|
์ด๋ฏธ์ง URL |
|
|
ํ์ |
|
|
ํ์ ๊ฐ์ |
|
|
๋ฆฌ๋ทฐ ๊ฐ์ |
|
|
์ฐ ๊ฐ์ |
|
|
์ฐ ์ฌ๋ถ |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
ํ์ฌ ์ปค์ |
|
|
๋ค์ ์ปค์ |
|
|
ํ์ด์ง ํฌ๊ธฐ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
|
|
๋ฉํ ์ ๋ณด |
|
|
์๋ฒ ๋ฒ์ |
|
|
์๋ฒ ์ธ์ฝ๋ฉ |
|
|
์๋ต ์๊ฐ |
|
|
API ๊ฒฝ๋ก ๋ฒ์ |
|
|
์๋ฌ ์ ๋ณด |
์๋ต ์์
{
"success" : true,
"code" : 200,
"data" : {
"items" : [ {
"alcoholId" : 1,
"korName" : "๊ธ๋ ํผ๋ 15๋
",
"engName" : "Glenfiddich 15",
"korCategoryName" : "์ฑ๊ธ ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"imageUrl" : "https://example.com/image.jpg",
"rating" : 4.5,
"ratingCount" : 100,
"reviewCount" : 50,
"pickCount" : 30,
"isPicked" : false
} ],
"pageable" : {
"currentCursor" : 0,
"cursor" : 10,
"pageSize" : 10,
"hasNext" : false
}
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 9, 215090518 ],
"serverPathVersion" : "v1"
}
}
์ฌ์ฉ ์์
"๋ด ์ถ์ฒ ์์คํค" ํ๋ ์ด์ ์ ID๊ฐ 1๋ฒ์ด๋ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฒญํ ์ ์์ต๋๋ค:
GET /api/v1/curations/1/alcohols?cursor=0&pageSize=10
์ด ์์ฒญ์ ๋ด์ฒ ์ ์ด์ธ๋ฆฌ๋ ์์คํค ๋ชฉ๋ก๊ณผ ํจ๊ป ๊ฐ ์์คํค์ ํ์ , ๋ฆฌ๋ทฐ ์, ์ฐ ํ์ ๋ฑ์ ์ ๋ณด๋ฅผ ๋ฐํํฉ๋๋ค.
7.8. ์ฃผ๊ฐ ์ธ๊ธฐ ์์คํค ์กฐํ
์ฃผ๊ฐ ์ธ๊ธฐ ์์คํค๋ฅผ ์กฐํํฉ๋๋ค.
parameter top์ด 10์ผ ๊ฒฝ์ฐ, ์ฃผ๊ฐ ์ธ๊ธฐ ์์คํค 10๊ฐ๋ฅผ ์กฐํํฉ๋๋ค.
parameter๊ฐ ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๊ฐ์ 5์ ๋๋ค.
GET /api/v1/popular/week
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์กฐํํ ์ฃผ๊ฐ ์ธ๊ธฐ ์ ๋ชฉ๋ก ์ฌ์ด์ฆ(๊ฐฏ์) |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ฃผ๊ฐ ์ธ๊ธฐ ์ ๋ฆฌ์คํธ์ ํฌ๊ธฐ |
|
|
์ฃผ๊ฐ ์ธ๊ธฐ ์ ๋ฆฌ์คํธ |
|
|
์ ID |
|
|
์ ์ด๋ฆ |
|
|
์ ์๋ฌธ๋ช |
|
|
์ ์ ํ๊ท ํ์ |
|
|
์ ์ ํ์ ์ฐธ์ฌ์ ์ |
|
|
์ ์นดํ ๊ณ ๋ฆฌ |
|
|
์ ์นดํ ๊ณ ๋ฆฌ ์๋ฌธ๋ช |
|
|
์ ์ด๋ฏธ์ง URL |
|
|
๋ด๊ฐ ์ฐํ๋์ง ์ฌ๋ถ |
|
|
์ธ๊ธฐ๋ ์ ์ |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 5,
"alcohols" : [ {
"alcoholId" : 1,
"korName" : "๊ธ๋ ํผ๋",
"engName" : "Glenfiddich",
"rating" : 1.0,
"ratingCount" : 56,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : false,
"popularScore" : 0.01
}, {
"alcoholId" : 2,
"korName" : "๋งฅ์บ๋",
"engName" : "Macallan",
"rating" : 0.5,
"ratingCount" : 9,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : true,
"popularScore" : 0.0
}, {
"alcoholId" : 3,
"korName" : "๊ธ๋ ๋ฆฌ๋ฒณ",
"engName" : "Glenlivet",
"rating" : 2.5,
"ratingCount" : 4,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : false,
"popularScore" : 0.01
}, {
"alcoholId" : 4,
"korName" : "๋ฐ๋ฒ ๋",
"engName" : "Balvenie",
"rating" : 2.0,
"ratingCount" : 57,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : true,
"popularScore" : 0.0
}, {
"alcoholId" : 5,
"korName" : "๋ผํ๋ก์ต",
"engName" : "Laphroaig",
"rating" : 1.0,
"ratingCount" : 85,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : false,
"popularScore" : 0.0
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 9, 454730454 ],
"serverPathVersion" : "v1"
}
}
7.9. ๋ด ์์ฆ ์ธ๊ธฐ ์์คํค ์กฐํ
๋ด ์ธ๊ธฐ ์์คํค๋ฅผ ์กฐํํฉ๋๋ค.
GET /api/v1/popular/spring
์์ฒญ ํ๋ผ๋ฏธํฐ
$ curl 'https://api.bottle-note.com/api/v1/popular/spring' -i -X GET
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ ID |
|
|
์ ์ด๋ฆ |
|
|
์ ์๋ฌธ๋ช |
|
|
์ ์ ํ๊ท ํ์ |
|
|
์ ์ ํ์ ์ฐธ์ฌ์ ์ |
|
|
์ ์นดํ ๊ณ ๋ฆฌ |
|
|
์ ์นดํ ๊ณ ๋ฆฌ ์๋ฌธ๋ช |
|
|
์ ์ด๋ฏธ์ง URL |
|
|
๋ด๊ฐ ์ฐํ๋์ง ์ฌ๋ถ |
|
|
์ธ๊ธฐ๋ ์ ์ |
{
"success" : true,
"code" : 200,
"data" : [ {
"alcoholId" : 1,
"korName" : "๊ธ๋ ํผ๋",
"engName" : "Glenfiddich",
"rating" : 0.5,
"ratingCount" : 85,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : false,
"popularScore" : 0.01
}, {
"alcoholId" : 2,
"korName" : "๋งฅ์บ๋",
"engName" : "Macallan",
"rating" : 1.5,
"ratingCount" : 81,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : true,
"popularScore" : 0.0
}, {
"alcoholId" : 3,
"korName" : "๊ธ๋ ๋ฆฌ๋ฒณ",
"engName" : "Glenlivet",
"rating" : 0.0,
"ratingCount" : 63,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : false,
"popularScore" : 0.0
}, {
"alcoholId" : 4,
"korName" : "๋ฐ๋ฒ ๋",
"engName" : "Balvenie",
"rating" : 2.0,
"ratingCount" : 80,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : true,
"popularScore" : 0.0
}, {
"alcoholId" : 5,
"korName" : "๋ผํ๋ก์ต",
"engName" : "Laphroaig",
"rating" : 0.0,
"ratingCount" : 92,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : false,
"popularScore" : 0.0
} ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 9, 415019991 ],
"serverPathVersion" : "v1"
}
}
7.10. ์ฃผ๊ฐ ์กฐํ์ ๊ธฐ๋ฐ ์ธ๊ธฐ ์์คํค ์กฐํ
์ฃผ๊ฐ ์กฐํ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ธ๊ธฐ ์์คํค๋ฅผ ์กฐํํฉ๋๋ค.
์กฐํ์๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ํ์ ์ด ๋์ ์์คํค๋ก ์ฑ์์ ๋ฐํํฉ๋๋ค.
GET /api/v1/popular/view/week
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์กฐํํ ์์คํค ๊ฐ์ (๊ธฐ๋ณธ๊ฐ: 20) |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์กฐํ๋ ์์คํค ๊ฐ์ |
|
|
์ฃผ๊ฐ ์กฐํ์ ๊ธฐ๋ฐ ์ธ๊ธฐ ์์คํค ๋ฆฌ์คํธ |
|
|
์์คํค ID |
|
|
์์คํค ํ๊ธ๋ช |
|
|
์์คํค ์๋ฌธ๋ช |
|
|
ํ๊ท ํ์ |
|
|
ํ์ ์ฐธ์ฌ์ ์ |
|
|
์นดํ ๊ณ ๋ฆฌ ํ๊ธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ์๋ฌธ๋ช |
|
|
์ด๋ฏธ์ง URL |
|
|
์ฐ ์ฌ๋ถ |
|
|
์ธ๊ธฐ๋ ์ ์ (์กฐํ์ ๊ธฐ๋ฐ) |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 5,
"alcohols" : [ {
"alcoholId" : 1,
"korName" : "๊ธ๋ ํผ๋",
"engName" : "Glenfiddich",
"rating" : 1.0,
"ratingCount" : 34,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : false,
"popularScore" : 0.01
}, {
"alcoholId" : 2,
"korName" : "๋งฅ์บ๋",
"engName" : "Macallan",
"rating" : 0.0,
"ratingCount" : 55,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : true,
"popularScore" : 0.0
}, {
"alcoholId" : 3,
"korName" : "๊ธ๋ ๋ฆฌ๋ฒณ",
"engName" : "Glenlivet",
"rating" : 1.5,
"ratingCount" : 92,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : false,
"popularScore" : 0.0
}, {
"alcoholId" : 4,
"korName" : "๋ฐ๋ฒ ๋",
"engName" : "Balvenie",
"rating" : 2.0,
"ratingCount" : 48,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : true,
"popularScore" : 0.01
}, {
"alcoholId" : 5,
"korName" : "๋ผํ๋ก์ต",
"engName" : "Laphroaig",
"rating" : 1.5,
"ratingCount" : 64,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : false,
"popularScore" : 0.01
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 9, 312404823 ],
"serverPathVersion" : "v1"
}
}
7.11. ์๊ฐ ์กฐํ์ ๊ธฐ๋ฐ ์ธ๊ธฐ ์์คํค ์กฐํ
์๊ฐ ์กฐํ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ธ๊ธฐ ์์คํค๋ฅผ ์กฐํํฉ๋๋ค.
์กฐํ์๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ํ์ ์ด ๋์ ์์คํค๋ก ์ฑ์์ ๋ฐํํฉ๋๋ค.
GET /api/v1/popular/view/monthly
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์กฐํํ ์์คํค ๊ฐ์ (๊ธฐ๋ณธ๊ฐ: 20) |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์กฐํ๋ ์์คํค ๊ฐ์ |
|
|
์๊ฐ ์กฐํ์ ๊ธฐ๋ฐ ์ธ๊ธฐ ์์คํค ๋ฆฌ์คํธ |
|
|
์์คํค ID |
|
|
์์คํค ํ๊ธ๋ช |
|
|
์์คํค ์๋ฌธ๋ช |
|
|
ํ๊ท ํ์ |
|
|
ํ์ ์ฐธ์ฌ์ ์ |
|
|
์นดํ ๊ณ ๋ฆฌ ํ๊ธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ์๋ฌธ๋ช |
|
|
์ด๋ฏธ์ง URL |
|
|
์ฐ ์ฌ๋ถ |
|
|
์ธ๊ธฐ๋ ์ ์ (์กฐํ์ ๊ธฐ๋ฐ) |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 5,
"alcohols" : [ {
"alcoholId" : 1,
"korName" : "๊ธ๋ ํผ๋",
"engName" : "Glenfiddich",
"rating" : 2.0,
"ratingCount" : 35,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : false,
"popularScore" : 0.01
}, {
"alcoholId" : 2,
"korName" : "๋งฅ์บ๋",
"engName" : "Macallan",
"rating" : 2.0,
"ratingCount" : 40,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : true,
"popularScore" : 0.01
}, {
"alcoholId" : 3,
"korName" : "๊ธ๋ ๋ฆฌ๋ฒณ",
"engName" : "Glenlivet",
"rating" : 2.0,
"ratingCount" : 40,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : false,
"popularScore" : 0.0
}, {
"alcoholId" : 4,
"korName" : "๋ฐ๋ฒ ๋",
"engName" : "Balvenie",
"rating" : 2.0,
"ratingCount" : 72,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : true,
"popularScore" : 0.01
}, {
"alcoholId" : 5,
"korName" : "๋ผํ๋ก์ต",
"engName" : "Laphroaig",
"rating" : 1.5,
"ratingCount" : 22,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : false,
"popularScore" : 0.01
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 9, 373126595 ],
"serverPathVersion" : "v1"
}
}
7.12. ํ ์ด์คํ ํ๊ทธ ์ถ์ถ
๋ฌธ์ฅ(๋ฆฌ๋ทฐ ๋ด์ฉ ๋ฑ)์์ ํ ์ด์คํ ํ๊ทธ๋ฅผ ์ถ์ถํฉ๋๋ค.
-
์ ๋ ฅ๋ ํ ์คํธ์์ ๋ฑ๋ก๋ ํ ์ด์คํ ํ๊ทธ์ ๋งค์นญ๋๋ ๋จ์ด๋ฅผ ์ถ์ถํฉ๋๋ค.
-
๋ถ๋ถ ๋งค์นญ์ ์ ์ธ๋ฉ๋๋ค. (์: "๋ฐ๋๋ผ๋น"์์ "๋ฐ๋๋ผ"๋ ์ถ์ถ๋์ง ์์)
-
๋งค์นญ๋๋ ํ๊ทธ๊ฐ ์์ผ๋ฉด ๋น ๋ฐฐ์ด์ด ๋ฐํ๋ฉ๋๋ค.
์์ฒญ ํ๋ผ๋ฏธํฐ
$ http GET 'http://localhost:8080/api/v1/tasting-tags/extract?text=%EB%B0%94%EB%8B%90%EB%9D%BC+%ED%96%A5%EC%9D%B4+%EC%A2%8B%EA%B3%A0+%EA%BF%80+%EA%B0%99%EC%9D%80+%EB%8B%A8%EB%A7%9B%EC%97%90+%EC%8A%A4%EB%AA%A8%ED%82%A4+%ED%95%A8%EC%9D%B4+%EB%8A%90%EA%BB%B4%EC%A0%B8%EC%9A%94'
| Parameter | Description |
|---|---|
|
ํ๊ทธ๋ฅผ ์ถ์ถํ ๋ฌธ์ฅ (๋ฆฌ๋ทฐ ๋ด์ฉ ๋ฑ) |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ถ์ถ๋ ํ๊ทธ ์ด๋ฆ ๋ชฉ๋ก (๋ฌธ์์ด ๋ฐฐ์ด) |
|
|
๋ฉํ ์ ๋ณด |
|
|
์๋ฒ ๋ฒ์ |
|
|
์๋ฒ ์ธ์ฝ๋ฉ |
|
|
์๋ต ์๊ฐ |
|
|
API ๊ฒฝ๋ก ๋ฒ์ |
|
|
์๋ฌ ์ ๋ณด |
{
"success" : true,
"code" : 200,
"data" : [ "๋ฐ๋๋ผ", "๊ฟ", "์ค๋ชจํค" ],
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 9, 618272428 ],
"serverPathVersion" : "v1"
}
}
8. ๋ฆฌ๋ทฐ (review) ๊ด๋ จ API
8.1. ๋ฆฌ๋ทฐ ๋ฑ๋ก
๋ฆฌ๋ทฐ ๋ฑ๋ก ๊ธฐ๋ฅ์ ๋๋ค. RequestBody๋ก ์์ฒญ์ ์ ๋ฌํฉ๋๋ค.
-
content๋ ๋ฐ๋์ ์กด์ฌํด์ผ ํ๋ฉฐ 700์๋ฅผ ๋์ ์ ์์ต๋๋ค.
-
status์ ๊ธฐ๋ณธ๊ฐ์ PUBLIC์ผ๋ก ์ค์ ๋ฉ๋๋ค.
-
locationInfo์ imageUrlList๋ NULL์ผ ์ ์์ต๋๋ค. ์ด๋ฏธ์ง๋ ์ต๋ 5์ฅ๊น์ง ์ ๋ก๋๊ฐ ํ์ฉ๋ฉ๋๋ค.
-
tastingTagList๋ 15๊ฐ๊น์ง ํ์ฉ๋๋ฉฐ, ๊ฐ tastingTag๋ ์ต๋ 12์ ๊ธธ์ด๋ก ์ ํ๋ฉ๋๋ค.
๋ฆฌ๋ทฐ ๋ฑ๋ก์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋๋ฉด, ์ ์ฅ๋ ๋ฆฌ๋ทฐ์ ID์ ๋ฆฌ๋ทฐ ๋ด์ฉ, ๊ทธ๋ฆฌ๊ณ ๋ฆฌ๋ทฐ๋ฅผ ์์ฑํ ์์คํค์ ๋ฆฌ๋ทฐ ์กฐํ URL์ด ๋ฐํ๋ฉ๋๋ค.
POST /api/v1/reviews
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
์ ID |
|
|
|
๋ฆฌ๋ทฐ ๋ด์ฉ (์ต๋ 700์) |
|
|
|
๋ฆฌ๋ทฐ ์ํ |
|
|
|
๊ฐ๊ฒฉ |
|
|
|
์ ํ์ (์ or ๋ณ |
|
|
|
์์น ์ ๋ณด |
|
|
|
O |
์ํธ ๋ช |
|
|
O |
์ฐํธ๋ฒํธ |
|
|
O |
์ฃผ์ |
|
|
O |
์์ธ ์ฃผ์ |
|
|
O |
์นดํ ๊ณ ๋ฆฌ |
|
|
O |
์ง๋ URL |
|
|
O |
์๋(x์ขํ) |
|
|
O |
๊ฒฝ๋(y์ขํ) |
|
|
์ด๋ฏธ์ง URL ๋ชฉ๋ก |
|
|
|
์ด๋ฏธ์ง ์์ |
|
|
|
์ด๋ฏธ์ง ๋ทฐ URL |
|
|
|
ํ ์ด์คํ ํ๊ทธ ๋ชฉ๋ก (์ต๋ 15๊ฐ) |
|
|
|
๋ฆฌ๋ทฐ๋ณ์ (ํด๋น ๋ฆฌ๋ทฐ๋ฅผ ๋จ๊ธธ ์์ ์ ๋ณ์ ) |
{
"alcoholId" : 1,
"status" : "PUBLIC",
"content" : "๋ง์์ด์",
"sizeType" : "GLASS",
"price" : 30000,
"locationInfo" : {
"locationName" : "xxPub",
"zipCode" : "12345",
"address" : "์์ธ์ ๊ฐ๋จ๊ตฌ ์ฒญ๋ด๋",
"detailAddress" : "xx๋น๋ฉ",
"category" : "PUB",
"mapUrl" : "https://api.bottle-note.com",
"latitude" : "111.111",
"longitude" : "222.222"
},
"imageUrlList" : [ {
"order" : 1,
"viewUrl" : "https://api.bottle-note.com/images/1"
}, {
"order" : 2,
"viewUrl" : "https://api.bottle-note.com/images/2"
}, {
"order" : 3,
"viewUrl" : "https://api.bottle-note.com/images/3"
} ],
"tastingTagList" : [ "ํ
์ด์คํ
ํ๊ทธ1", "ํ
์ด์คํ
ํ๊ทธ2", "ํ
์ด์คํ
ํ๊ทธ3" ],
"rating" : 0.5
}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์์ฒญ ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์๋ต ๋ฐ์ดํฐ |
|
|
์์ฑ๋ ๋ฆฌ๋ทฐ ID |
|
|
๋ฆฌ๋ทฐ ๋ด์ฉ |
|
|
์ฝ๋ฐฑ URL |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
|
|
์๋ฒ ๋ฒ์ |
|
|
์๋ฒ ์ธ์ฝ๋ฉ |
|
|
์๋ฒ ์๋ต ์๊ฐ |
|
|
์๋ฒ ๊ฒฝ๋ก ๋ฒ์ |
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 358
{
"success" : true,
"code" : 200,
"data" : {
"id" : 1,
"content" : "๋ง์์ด์",
"callback" : "https://bottle-note.com/api/v1/reviews/1"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 10, 853543649 ],
"serverPathVersion" : "v1"
}
}
ReviewStatus
| ์ฝ๋ | ์ค๋ช |
|---|---|
PUBLIC |
๊ณต๊ฐ(๊ธฐ๋ณธ ๊ฐ) |
PRIVATE |
๋น๊ณต๊ฐ |
SizeType
| ์ฝ๋ | ์ค๋ช |
|---|---|
GLASS |
์ |
BOTTLE |
๋ณ |
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
REQUIRED_REVIEW_ID |
BAD_REQUEST |
๋ฆฌ๋ทฐ ์์ด๋๋ ํ์์ ๋๋ค. |
REVIEW_ID_MINIMUM |
BAD_REQUEST |
๋ฆฌ๋ทฐ ์๋ณ์๋ ์ต์ 1 ์ด์์ด์ด์ผ ํฉ๋๋ค. |
REVIEW_CONTENT_REQUIRED |
BAD_REQUEST |
๋ฆฌ๋ทฐ ๋ด์ฉ์ ํ์์ ๋๋ค. |
REVIEW_CONTENT_MAXIMUM |
BAD_REQUEST |
๋ฆฌ๋ทฐ ๋ด์ฉ์ ์ต๋ ๊ธ์์๋ฅผ ์ด๊ณผํ์ต๋๋ค. |
PRICE_MINIMUM |
BAD_REQUEST |
๊ฐ๊ฒฉ์ 0์ ์ด์์ด์ด์ผ ํฉ๋๋ค. |
PRICE_MAXIMUM |
BAD_REQUEST |
์ ๋ ฅํ ์ ์๋ ๊ฐ๊ฒฉ์ ๋ฒ์๊ฐ ์๋๋๋ค. |
ZIPCODE_ONLY_NUMBER |
BAD_REQUEST |
์ฐํธ๋ฒํธ๋ ์ซ์๋ง ๊ฐ๋ฅํฉ๋๋ค |
ZIPCODE_FORMAT |
BAD_REQUEST |
์ฐํธ๋ฒํธ๋ 5์๋ฆฌ์ ์ซ์๋ง ๊ฐ๋ฅํฉ๋๋ค |
8.2. ๋ฆฌ๋ทฐ ์กฐํ
๋ฆฌ๋ทฐ ์กฐํ ๊ธฐ๋ฅ์ ๋๋ค. PathVariable๋ก alcoholId๋ฅผ ์ ๋ฌํฉ๋๋ค.
| PathVariable | ์ค๋ช |
|---|---|
|
์์คํค ID |
API EndPoint
GET /api/v1/reviews/{alcoholId}
์์ฒญ ํ๋ผ๋ฏธํฐ
$ http GET 'https://api.bottle-note.com/api/v1/reviews/1?sortType=POPULAR&sortOrder=DESC&cursor=0&pageSize=2'
| Parameter | Description |
|---|---|
|
์ ๋ ฌ ํ์ (ํด๋น ๋ฌธ์ ํ๋จ enum ์ฐธ์กฐ) |
|
์ ๋ ฌ ์์(ํด๋น ๋ฌธ์ ํ๋จ enum ์ฐธ์กฐ) |
|
์กฐํ ํ ์์ ๊ธฐ์ค ์์น |
|
์กฐํ ํ ํ์ด์ง ์ฌ์ด์ฆ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
ํด๋น ์ ์ ์ด ๋ฆฌ๋ทฐ ์ |
|
|
๋ฆฌ๋ทฐ ID |
|
|
๋ฆฌ๋ทฐ ๋ด์ฉ |
|
|
๋ฆฌ๋ทฐ ๊ฐ๊ฒฉ |
|
|
๋ฆฌ๋ทฐ ์ฌ์ด์ฆ ํ์ |
|
|
๋ฆฌ๋ทฐ ์ข์์ ์ |
|
|
๋ฆฌ๋ทฐ ๋๊ธ ์ |
|
|
๋ฆฌ๋ทฐ ์ด๋ฏธ์ง URL |
|
|
๋ฆฌ๋ทฐ ์ด๋ฏธ์ง ์ด ๊ฐ์ |
|
|
๋ฆฌ๋ทฐ ์์ฑ์ ID |
|
|
๋ฆฌ๋ทฐ ์์ฑ์ ๋๋ค์ |
|
|
๋ฆฌ๋ทฐ ์์ฑ์ ํ๋กํ ์ด๋ฏธ์ง URL |
|
|
๋ฆฌ๋ทฐ ํ์ |
|
|
๋ฆฌ๋ทฐ ์กฐํ์ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์ ๋ณด |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ๋ช |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์ฐํธ๋ฒํธ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์ฃผ์ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์์ธ ์ฃผ์ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์นดํ ๊ณ ๋ฆฌ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์ง๋ URL |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์๋ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ๊ฒฝ๋ |
|
|
๋ฆฌ๋ทฐ ๊ณต๊ฐ ์ฌ๋ถ (PUBLIC/PRIVATE) |
|
|
๋ด๊ฐ ์์ฑํ ๋ฆฌ๋ทฐ์ธ์ง ์ฌ๋ถ |
|
|
๋ด๊ฐ ์ข์์๋ฅผ ๋๋ ๋์ง ์ฌ๋ถ |
|
|
๋ด๊ฐ ๋๊ธ์ ๋ฌ์๋์ง ์ฌ๋ถ |
|
|
๋ฒ ์คํธ ๋ฆฌ๋ทฐ ์ฌ๋ถ |
|
|
๋ฆฌ๋ทฐ ํ ์ด์คํ ํ๊ทธ ๋ชฉ๋ก |
|
|
๋ฆฌ๋ทฐ ์์ฑ ๋ ์ง 'yyyyMMddHHmm' ํฌ๋งท |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
์กฐํ ์ ๊ธฐ์ค ์ปค์ |
|
|
๋ค์ ํ์ด์ง ์ปค์ |
|
|
์กฐํ๋ ํ์ด์ง ์ฌ์ด์ฆ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 2,
"reviewList" : [ {
"reviewId" : 1,
"reviewContent" : "๋ง์์ด์",
"reviewImageUrl" : "https://example.com/review-image.jpg",
"createAt" : [ 2026, 4, 8, 13, 53, 10, 977378253 ],
"totalImageCount" : null,
"userInfo" : {
"userId" : 1,
"nickName" : "ํ๊ธธ๋",
"userProfileImage" : "https://example.com/profile.jpg"
},
"isMyReview" : true,
"status" : "PUBLIC",
"isBestReview" : false,
"locationInfo" : {
"name" : "๋์์ ",
"zipCode" : null,
"address" : "์์ธ ์กํ๊ตฌ ์กํ๋๋ก 145",
"detailAddress" : "2์ธต ๋์์ ",
"category" : "์์์ > ์ ์ง > ์นตํ
์ผ๋ฐ",
"mapUrl" : "https://place.map.kakao.com/2088591613",
"latitude" : "37.4835934678036",
"longitude" : "127.122831408454"
},
"sizeType" : "BOTTLE",
"price" : 100000,
"rating" : 4.5,
"likeCount" : 10,
"replyCount" : 2,
"isLikedByMe" : false,
"hasReplyByMe" : true,
"viewCount" : 0,
"tastingTagList" : [ "๊ณผ์ผํฅ", "๋ถ๋๋ฌ์" ]
}, {
"reviewId" : 2,
"reviewContent" : "๋๋ฆ ๋จน์๋ง ํ๋ค์",
"reviewImageUrl" : "https://example.com/review-image.jpg",
"createAt" : [ 2026, 4, 8, 13, 53, 10, 977389855 ],
"totalImageCount" : null,
"userInfo" : {
"userId" : 1,
"nickName" : "ํ๊ธธ๋",
"userProfileImage" : "https://example.com/profile.jpg"
},
"isMyReview" : true,
"status" : "PUBLIC",
"isBestReview" : false,
"locationInfo" : {
"name" : "๋์์ ",
"zipCode" : null,
"address" : "์์ธ ์กํ๊ตฌ ์กํ๋๋ก 145",
"detailAddress" : "2์ธต ๋์์ ",
"category" : "์์์ > ์ ์ง > ์นตํ
์ผ๋ฐ",
"mapUrl" : "https://place.map.kakao.com/2088591613",
"latitude" : "37.4835934678036",
"longitude" : "127.122831408454"
},
"sizeType" : "BOTTLE",
"price" : 110000,
"rating" : 4.5,
"likeCount" : 10,
"replyCount" : 2,
"isLikedByMe" : false,
"hasReplyByMe" : true,
"viewCount" : 0,
"tastingTagList" : [ "๊ณผ์ผํฅ", "๋ถ๋๋ฌ์" ]
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 10, 980313041 ],
"pageable" : {
"currentCursor" : 0,
"cursor" : 1,
"pageSize" : 2,
"hasNext" : false
},
"serverPathVersion" : "v1"
}
}
์ ๋ ฌ ํ์ (sortType)
POPULAR |
์ธ๊ธฐ์ |
RATING |
๋ณ์ ์ |
BOTTLE_PRICE |
๋ณ ๊ฐ๊ฒฉ ์ |
GLASS_PRICE |
์ ๊ฐ๊ฒฉ ์ |
-
ํด๋น ๊ฐ์ด ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ POPULAR ์ ๋๋ค.
-
ํ์ ์ด ์๋ชป ์ ๋ฌ๋ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐํ๋ฉ๋๋ค.
์ ๋ ฌ ๋ฐฉํฅ (sortOrder)
-
ํด๋น ์ ์๋ ์ ๋ ฌ ๋ฐฉํฅ์ ๋ํ๋ด๋ ๊ฐ์ ๋๋ค.
-
์๋น์ค์ ๋ชจ๋ ์ ๋ ฌ ๊ด๋ จ API์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
DESC |
๋ด๋ฆผ์ฐจ์ |
5 → 3 → 2 → 1 |
ASC |
์ค๋ฆ์ฐจ์ |
1 → 2 → 3 → 5 |
-
๋๋ค์ ๊ฒฝ์ฐ ์ ๋ ฌ ํ์ ์ ๋ฐ๋ผ ์๋์ ๋ค๋ฅด๊ฒ ๋์ ํ ์ ์์ต๋๋ค.
-
ํด๋น ๊ฐ์ด ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ DESC(๋ด๋ฆผ์ฐจ์) ์ ๋๋ค.
-
ํ์ ์ด ์๋ชป ์ ๋ฌ๋ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐํ๋ฉ๋๋ค.
8.3. ๋ด๊ฐ ์์ฑํ ๋ฆฌ๋ทฐ ์กฐํ
๋ด๊ฐ ์์ฑํ ๋ฆฌ๋ทฐ ์กฐํ ๊ธฐ๋ฅ์ ๋๋ค.
์์ฒญ ๊ฒฝ๋ก์ ์กฐํ ํ ์์ฝ์ฌ์ ์๋ณ์๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค. ์์ฝ์ฌ์ ์๋ณ์๋ Long ํ์ ์ ๋๋ค.
| PathVariable | ์ค๋ช |
|---|---|
|
์์คํค ID |
API EndPoint
GET /api/v1/reviews/me/{alcoholId}
์์ฒญ ํ๋ผ๋ฏธํฐ
$ http GET 'https://api.bottle-note.com/api/v1/reviews/me/1?sortType=POPULAR&sortOrder=DESC&cursor=0&pageSize=2'
| Parameter | Description |
|---|---|
|
์ ๋ ฌ ํ์ (ํด๋น ๋ฌธ์ ํ๋จ enum ์ฐธ์กฐ) |
|
์ ๋ ฌ ์์(ํด๋น ๋ฌธ์ ํ๋จ enum ์ฐธ์กฐ) |
|
์กฐํ ํ ์์ ๊ธฐ์ค ์์น |
|
์กฐํ ํ ํ์ด์ง ์ฌ์ด์ฆ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
ํด๋น ์ ์ ์ด ๋ฆฌ๋ทฐ ์ |
|
|
๋ฆฌ๋ทฐ ID |
|
|
๋ฆฌ๋ทฐ ๋ด์ฉ |
|
|
๋ฆฌ๋ทฐ ๊ฐ๊ฒฉ |
|
|
๋ฆฌ๋ทฐ ์ฌ์ด์ฆ ํ์ |
|
|
๋ฆฌ๋ทฐ ์ข์์ ์ |
|
|
๋ฆฌ๋ทฐ ๋๊ธ ์ |
|
|
๋ฆฌ๋ทฐ ์ด๋ฏธ์ง URL |
|
|
๋ฆฌ๋ทฐ ์ด๋ฏธ์ง ์ด ๊ฐ์ |
|
|
๋ฆฌ๋ทฐ ์์ฑ์ ID |
|
|
๋ฆฌ๋ทฐ ์์ฑ์ ๋๋ค์ |
|
|
๋ฆฌ๋ทฐ ์์ฑ์ ํ๋กํ ์ด๋ฏธ์ง URL |
|
|
๋ฆฌ๋ทฐ ํ์ |
|
|
๋ฆฌ๋ทฐ ์กฐํ์ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์ ๋ณด |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ๋ช |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์ฐํธ๋ฒํธ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์ฃผ์ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์์ธ ์ฃผ์ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์นดํ ๊ณ ๋ฆฌ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์ง๋ URL |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ์๋ |
|
|
๋ฆฌ๋ทฐ ์ฅ์ ๊ฒฝ๋ |
|
|
๋ฆฌ๋ทฐ ๊ณต๊ฐ ์ฌ๋ถ (PUBLIC/PRIVATE) |
|
|
๋ด๊ฐ ์์ฑํ ๋ฆฌ๋ทฐ์ธ์ง ์ฌ๋ถ |
|
|
๋ด๊ฐ ์ข์์๋ฅผ ๋๋ ๋์ง ์ฌ๋ถ |
|
|
๋ด๊ฐ ๋๊ธ์ ๋ฌ์๋์ง ์ฌ๋ถ |
|
|
๋ฒ ์คํธ ๋ฆฌ๋ทฐ ์ฌ๋ถ |
|
|
๋ฆฌ๋ทฐ ํ ์ด์คํ ํ๊ทธ ๋ชฉ๋ก |
|
|
๋ฆฌ๋ทฐ ์์ฑ ๋ ์ง 'yyyyMMddHHmm' ํฌ๋งท |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
์กฐํ ์ ๊ธฐ์ค ์ปค์ |
|
|
๋ค์ ํ์ด์ง ์ปค์ |
|
|
์กฐํ๋ ํ์ด์ง ์ฌ์ด์ฆ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 2,
"reviewList" : [ {
"reviewId" : 1,
"reviewContent" : "๋ง์์ด์",
"reviewImageUrl" : "https://example.com/review-image.jpg",
"createAt" : [ 2026, 4, 8, 13, 53, 10, 743690547 ],
"totalImageCount" : null,
"userInfo" : {
"userId" : 1,
"nickName" : "ํ๊ธธ๋",
"userProfileImage" : "https://example.com/profile.jpg"
},
"isMyReview" : true,
"status" : "PUBLIC",
"isBestReview" : false,
"locationInfo" : {
"name" : "๋์์ ",
"zipCode" : null,
"address" : "์์ธ ์กํ๊ตฌ ์กํ๋๋ก 145",
"detailAddress" : "2์ธต ๋์์ ",
"category" : "์์์ > ์ ์ง > ์นตํ
์ผ๋ฐ",
"mapUrl" : "https://place.map.kakao.com/2088591613",
"latitude" : "37.4835934678036",
"longitude" : "127.122831408454"
},
"sizeType" : "BOTTLE",
"price" : 100000,
"rating" : 4.5,
"likeCount" : 10,
"replyCount" : 2,
"isLikedByMe" : false,
"hasReplyByMe" : true,
"viewCount" : 0,
"tastingTagList" : [ "๊ณผ์ผํฅ", "๋ถ๋๋ฌ์" ]
}, {
"reviewId" : 2,
"reviewContent" : "๋๋ฆ ๋จน์๋ง ํ๋ค์",
"reviewImageUrl" : "https://example.com/review-image.jpg",
"createAt" : [ 2026, 4, 8, 13, 53, 10, 743707669 ],
"totalImageCount" : null,
"userInfo" : {
"userId" : 1,
"nickName" : "ํ๊ธธ๋",
"userProfileImage" : "https://example.com/profile.jpg"
},
"isMyReview" : true,
"status" : "PUBLIC",
"isBestReview" : false,
"locationInfo" : {
"name" : "๋์์ ",
"zipCode" : null,
"address" : "์์ธ ์กํ๊ตฌ ์กํ๋๋ก 145",
"detailAddress" : "2์ธต ๋์์ ",
"category" : "์์์ > ์ ์ง > ์นตํ
์ผ๋ฐ",
"mapUrl" : "https://place.map.kakao.com/2088591613",
"latitude" : "37.4835934678036",
"longitude" : "127.122831408454"
},
"sizeType" : "BOTTLE",
"price" : 110000,
"rating" : 4.5,
"likeCount" : 10,
"replyCount" : 2,
"isLikedByMe" : false,
"hasReplyByMe" : true,
"viewCount" : 0,
"tastingTagList" : [ "๊ณผ์ผํฅ", "๋ถ๋๋ฌ์" ]
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 10, 748219636 ],
"pageable" : {
"currentCursor" : 0,
"cursor" : 1,
"pageSize" : 2,
"hasNext" : false
},
"serverPathVersion" : "v1"
}
}
์ ๋ ฌ ํ์ (sortType)
POPULAR |
์ธ๊ธฐ์ |
RATING |
๋ณ์ ์ |
BOTTLE_PRICE |
๋ณ ๊ฐ๊ฒฉ ์ |
GLASS_PRICE |
์ ๊ฐ๊ฒฉ ์ |
-
ํด๋น ๊ฐ์ด ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ POPULAR ์ ๋๋ค.
-
ํ์ ์ด ์๋ชป ์ ๋ฌ๋ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐํ๋ฉ๋๋ค.
์ ๋ ฌ ๋ฐฉํฅ (sortOrder)
-
ํด๋น ์ ์๋ ์ ๋ ฌ ๋ฐฉํฅ์ ๋ํ๋ด๋ ๊ฐ์ ๋๋ค.
-
์๋น์ค์ ๋ชจ๋ ์ ๋ ฌ ๊ด๋ จ API์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
DESC |
๋ด๋ฆผ์ฐจ์ |
5 → 3 → 2 → 1 |
ASC |
์ค๋ฆ์ฐจ์ |
1 → 2 → 3 → 5 |
-
๋๋ค์ ๊ฒฝ์ฐ ์ ๋ ฌ ํ์ ์ ๋ฐ๋ผ ์๋์ ๋ค๋ฅด๊ฒ ๋์ ํ ์ ์์ต๋๋ค.
-
ํด๋น ๊ฐ์ด ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ DESC(๋ด๋ฆผ์ฐจ์) ์ ๋๋ค.
-
ํ์ ์ด ์๋ชป ์ ๋ฌ๋ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐํ๋ฉ๋๋ค.
8.4. ๋ฆฌ๋ทฐ ์์
๋ฆฌ๋ทฐ ์์ ๊ธฐ๋ฅ์ ๋๋ค. PathVariable๋ก ReviewId๋ฅผ ์ ๋ฌํฉ๋๋ค.
์ ๋ฌํ ReviewId๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด ReviewException์ด ๋ฐ์ํฉ๋๋ค.
์์ ๋ด์ฉ์ RequestBody๋ก ์์ฒญ์ ์ ๋ฌํฉ๋๋ค.
content(๋ฆฌ๋ทฐ ๋ด์ฉ)์ ๊ธธ์ด๋ 700์๋ก ์ ํ๋๋ฉฐ, price(๊ฐ๊ฒฉ์) 0 ~ 1์กฐ ๋ฒ์๋ง ๊ฐ๋ฅํฉ๋๋ค.
ReviewStatus์ SizeType์ ์๋ ENUM์ ์ฐธ๊ณ ํด์ฃผ์ธ์.
PATCH /api/v1/reviews
์์ฒญ ํ๋ผ๋ฏธํฐ
-
Request Body ์์
์์ ํ์ง ์์ผ๋ ค๋ ํ๋๋ ๊ธฐ์กด์ ๊ฐ์ ์ ์งํ๊ณ , ์์ ํ๋ ค๋ ํ๋๋ง ์์ ๋ ๊ฐ์ผ๋ก ์ฑ์์ ์ ๋ฌํฉ๋๋ค.
ํ๋์ ๊ฐ์ด NULL์ธ ๊ฒฝ์ฐ 400 Bad Request๊ฐ ๋ฐ์ํฉ๋๋ค.
์๋ต ํ๋ผ๋ฏธํฐ
ReviewStatus
| ์ฝ๋ | ์ค๋ช |
|---|---|
PUBLIC |
๊ณต๊ฐ(๊ธฐ๋ณธ ๊ฐ) |
PRIVATE |
๋น๊ณต๊ฐ |
SizeType
| ์ฝ๋ | ์ค๋ช |
|---|---|
GLASS |
์ |
BOTTLE |
๋ณ |
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
REVIEW_CONTENT_REQUIRED |
BAD_REQUEST |
๋ฆฌ๋ทฐ ๋ด์ฉ์ ํ์์ ๋๋ค. |
REVIEW_CONTENT_MAXIMUM |
BAD_REQUEST |
๋ฆฌ๋ทฐ ๋ด์ฉ์ ์ต๋ ๊ธ์์๋ฅผ ์ด๊ณผํ์ต๋๋ค. |
PRICE_MINIMUM |
BAD_REQUEST |
๊ฐ๊ฒฉ์ 0์ ์ด์์ด์ด์ผ ํฉ๋๋ค. |
PRICE_MAXIMUM |
BAD_REQUEST |
์ ๋ ฅํ ์ ์๋ ๊ฐ๊ฒฉ์ ๋ฒ์๊ฐ ์๋๋๋ค. |
REVIEW_DISPLAY_STATUS_NOT_EMPTY |
BAD_REQUEST |
๋ฆฌ๋ทฐ ๊ณต๊ฐ/๋น๊ณต๊ฐ์ํ๋ ํ์์ ๋๋ค. |
ZIPCODE_ONLY_NUMBER |
BAD_REQUEST |
์ฐํธ๋ฒํธ๋ ์ซ์๋ง ๊ฐ๋ฅํฉ๋๋ค |
ZIPCODE_FORMAT |
BAD_REQUEST |
์ฐํธ๋ฒํธ๋ 5์๋ฆฌ์ ์ซ์๋ง ๊ฐ๋ฅํฉ๋๋ค |
8.5. ๋ฆฌ๋ทฐ ์ญ์
๋ฆฌ๋ทฐ ์ญ์ ๊ธฐ๋ฅ์ ๋๋ค.
๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ง ๋ฆฌ๋ทฐ๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค.
์ฌ์ฉ์๋ ์์ ์ด ์์ฑํ ๋ฆฌ๋ทฐ๋ง ์ญ์ ํ ์ ์์ต๋๋ค.
API ์๋ํฌ์ธํธ์ PathVariable๋ก ReviewId๋ฅผ ์ ๋ฌํฉ๋๋ค.
์ ๋ฌํ ReviewId์ ๋ฆฌ๋ทฐ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด(๋ก๊ทธ์ธํ ์ ์ ๊ฐ ์์ฑํ ๋ฆฌ๋ทฐ๊ฐ ์๋) ReviewException์ด ๋ฐ์ํฉ๋๋ค.
DELETE /api/v1/reviews/{reviewId}
์์ฒญ ํ๋ผ๋ฏธํฐ
-
PathVariable๋ก reviewId๋ฅผ ์ ๋ฌํฉ๋๋ค.
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ฑ๊ณต ๋ฉ์์ง ์ฝ๋ |
|
|
์ฑ๊ณต ๋ฉ์์ง |
|
|
๋ฆฌ๋ทฐ ์์ด๋ |
|
|
์๋ฒ ์๋ต ์ผ์ |
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 426
{
"success" : true,
"code" : 200,
"data" : {
"codeMessage" : "DELETE_SUCCESS",
"message" : "๋ฆฌ๋ทฐ ์ญ์ ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ต๋๋ค.",
"reviewId" : 1,
"responseAt" : "2026-04-08 13:53:10"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 10, 645955217 ],
"serverPathVersion" : "v1"
}
}
8.6. ๋ฆฌ๋ทฐ ์์ธ์กฐํ
๋ฆฌ๋ทฐ ์์ธ์กฐํ ๊ธฐ๋ฅ์ ๋๋ค.
API ์๋ํฌ์ธํธ์ PathVariable๋ก ReviewId๋ฅผ ์ ๋ฌํฉ๋๋ค.
์ ๋ฌํ ReviewId์ ๋ฆฌ๋ทฐ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด(๋ก๊ทธ์ธํ ์ ์ ๊ฐ ์์ฑํ ๋ฆฌ๋ทฐ๊ฐ ์๋) ReviewException์ด ๋ฐ์ํฉ๋๋ค.
GET /api/v1/reviews/detail/{reviewId}
์์ฒญ ํ๋ผ๋ฏธํฐ
-
PathVariable๋ก reviewId๋ฅผ ์ ๋ฌํฉ๋๋ค.
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์์ฒญ ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ ID |
|
|
์ ์ ํ๊ตญ์ด ์ด๋ฆ |
|
|
์ ์ ์์ด ์ด๋ฆ |
|
|
์ ์นดํ ๊ณ ๋ฆฌ์ ํ๊ตญ์ด ์ด๋ฆ |
|
|
์ ์นดํ ๊ณ ๋ฆฌ์ ์์ด ์ด๋ฆ |
|
|
์ ์ด๋ฏธ์ง URL |
|
|
์ ํ ์ฌ๋ถ |
|
|
๋ฆฌ๋ทฐ ID |
|
|
๋ฆฌ๋ทฐ ๋ด์ฉ |
|
|
๊ฐ๊ฒฉ |
|
|
์ฌ์ด์ฆ ํ์ |
|
|
์ข์์ ๊ฐ์ |
|
|
๋๊ธ ๊ฐ์ |
|
|
๋ฆฌ๋ทฐ ์ด๋ฏธ์ง URL |
|
|
๋ฆฌ๋ทฐ ์ด๋ฏธ์ง ์ด ๊ฐ์ |
|
|
์ฌ์ฉ์ ์ ๋ณด |
|
|
์ฌ์ฉ์ ID |
|
|
๋๋ค์ |
|
|
์ฌ์ฉ์ ํ๋กํ ์ด๋ฏธ์ง URL |
|
|
ํ์ |
|
|
์กฐํ์ |
|
|
์์น ์ ๋ณด |
|
|
์ํธ ๋ช |
|
|
์ฐํธ๋ฒํธ |
|
|
์ฃผ์ |
|
|
์์ธ์ฃผ์ |
|
|
์นดํ ๊ณ ๋ฆฌ |
|
|
์ง๋ URL |
|
|
์๋ |
|
|
๊ฒฝ๋ |
|
|
๋ฆฌ๋ทฐ ์ํ |
|
|
๋ด ๋ฆฌ๋ทฐ ์ฌ๋ถ |
|
|
๋ด๊ฐ ์ข์์๋ฅผ ๋๋ ๋์ง ์ฌ๋ถ |
|
|
๋ด๊ฐ ๋๊ธ์ ๋ฌ์๋์ง ์ฌ๋ถ |
|
|
๋ฒ ์คํธ ๋ฆฌ๋ทฐ ์ฌ๋ถ |
|
|
๋ฆฌ๋ทฐ ํ ์ด์คํ ํ๊ทธ ๋ชฉ๋ก |
|
|
๋ฆฌ๋ทฐ ์์ฑ ์๊ฐ |
|
|
๋ฆฌ๋ทฐ ์ด๋ฏธ์ง ๋ชฉ๋ก |
|
|
์ด๋ฏธ์ง ์์ |
|
|
์ด๋ฏธ์ง URL |
|
|
์๋ฌ ๋ชฉ๋ก |
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 1825
{
"success" : true,
"code" : 200,
"data" : {
"alcoholInfo" : {
"alcoholId" : 1,
"korName" : "๊ธ๋์ค๊ณ 12๋
์ฐ",
"engName" : "1770 ๊ธ๋์ค๊ณ ์ฑ๊ธ ๋ชฐํธ",
"korCategoryName" : "์ฑ๊ธ ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"imageUrl" : "ImageUrl",
"isPicked" : false
},
"reviewInfo" : {
"reviewId" : 1,
"reviewContent" : "์ด๊ฒ์ ์ํ ๋ฆฌ๋ทฐ์
๋๋ค.",
"reviewImageUrl" : "https://example.com/review-image.jpg",
"createAt" : [ 2026, 4, 8, 13, 53, 10, 891367345 ],
"totalImageCount" : null,
"userInfo" : {
"userId" : 1,
"nickName" : "ํ๊ธธ๋",
"userProfileImage" : "https://example.com/profile.jpg"
},
"isMyReview" : true,
"status" : "PUBLIC",
"isBestReview" : false,
"locationInfo" : {
"name" : "๋์์ ",
"zipCode" : null,
"address" : "์์ธ ์กํ๊ตฌ ์กํ๋๋ก 145",
"detailAddress" : "2์ธต ๋์์ ",
"category" : "์์์ > ์ ์ง > ์นตํ
์ผ๋ฐ",
"mapUrl" : "https://place.map.kakao.com/2088591613",
"latitude" : "37.4835934678036",
"longitude" : "127.122831408454"
},
"sizeType" : "GLASS",
"price" : 10000,
"rating" : 4.5,
"likeCount" : 10,
"replyCount" : 2,
"isLikedByMe" : false,
"hasReplyByMe" : true,
"viewCount" : 0,
"tastingTagList" : [ "๊ณผ์ผํฅ", "๋ถ๋๋ฌ์" ]
},
"reviewImageList" : [ {
"order" : 1,
"viewUrl" : "https://bottlenote.s3.ap-northeast-2.amazonaws.com/images/1"
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 10, 893302463 ],
"serverPathVersion" : "v1"
}
}
8.7. ๋ฆฌ๋ทฐ ์ํ ๋ณ๊ฒฝ
๋ฆฌ๋ทฐ ์ํ ๋ณ๊ฒฝ ๊ธฐ๋ฅ์ ๋๋ค.
๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ง ๋ฆฌ๋ทฐ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์ฌ์ฉ์๋ ์์ ์ด ์์ฑํ ๋ฆฌ๋ทฐ์ ์ํ๋ง ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
API ์๋ํฌ์ธํธ์ PathVariable๋ก ReviewId๋ฅผ ์ ๋ฌํฉ๋๋ค.
์ ๋ฌํ ReviewId์ ๋ฆฌ๋ทฐ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด(๋ก๊ทธ์ธํ ์ ์ ๊ฐ ์์ฑํ ๋ฆฌ๋ทฐ๊ฐ ์๋) ReviewException์ด ๋ฐ์ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ RequestBody๋ก ๋ณ๊ฒฝํ ๋ฆฌ๋ทฐ์ ์ํ๋ฅผ ์ ๋ฌํฉ๋๋ค. (PRIVATE, PUBLIC)
ReqeuestBody๊ฐ null์ธ ๊ฒฝ์ฐ Validation์ ์ํด REVIEW_STATUS_REQUIRED ์ฝ๋๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
PATCH /api/v1/reviews/{reviewId}/display
RequestBody ์์
PUBLIC |
๊ณต๊ฐ |
PRIVATE |
๋น๊ณต๊ฐ |
์์ฒญ ํ๋ผ๋ฏธํฐ
-
PathVariable๋ก reviewId๋ฅผ ์ ๋ฌํฉ๋๋ค.
-
RequestBody๋ก status๋ฅผ ์ ๋ฌํฉ๋๋ค.
| path | type | optional | description |
|---|---|---|---|
|
|
๋ฆฌ๋ทฐ ์ํ |
{
"status" : "PRIVATE"
}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ฑ๊ณต ๋ฉ์์ง ์ฝ๋ |
|
|
์ฑ๊ณต ๋ฉ์์ง |
|
|
๋ฆฌ๋ทฐ ์์ด๋ |
|
|
์๋ฒ ์๋ต ์ผ์ |
{
"success" : true,
"code" : 200,
"data" : {
"codeMessage" : "PRIVATE_SUCCESS",
"message" : "ํด๋น ๋ฆฌ๋ทฐ๊ฐ ๋น๊ณต๊ฐ ์ฒ๋ฆฌ๋์์ต๋๋ค.",
"reviewId" : 1,
"responseAt" : "2026-04-08 13:53:10"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 10, 952047365 ],
"serverPathVersion" : "v1"
}
}
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
REVIEW_NOT_EMPTY |
BAD_REQUEST |
๋ฆฌ๋ทฐ ์์ด๋๋ ํ์์ ๋๋ค. |
REVIEW_DISPLAY_STATUS_NOT_EMPTY |
BAD_REQUEST |
๋ฆฌ๋ทฐ ๊ณต๊ฐ/๋น๊ณต๊ฐ์ํ๋ ํ์์ ๋๋ค. |
REQUIRED_USER_ID |
BAD_REQUEST |
์ ์ ์์ด๋๋ ํ์์ ๋๋ค. |
REVIEW_NOT_FOUND |
BAD_REQUEST |
๋ฆฌ๋ทฐ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค |
8.8. ๋ฆฌ๋ทฐ ์ข์์
๋ฆฌ๋ทฐ์ ๋ํด ์ข์์ ์ฒ๋ฆฌ ๊ฐ๋ฅํ API ์ ๋๋ค.
์
๋ฐ์ดํธ ์ Acsess Token ์ด ํ์์ ์ผ๋ก ํ์ํฉ๋๋ค.
์ค๋ณต๋ ์์ฒญ ์์๋ ์์ธ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
-
์ข์์ ์์ฒญ ํ ๋ค์ ์ข์์ ์์ฒญ ์ ์ ์ ์ฒ๋ฆฌ ( ๋ฎ์ด์ฐ๊ธฐ )
PUT /api/v1/likes
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
์ข์์ ๋์ ๋ฆฌ๋ทฐ์ ์๋ณ์ |
|
|
|
์ ๋ฐ์ดํธ ํ ์ํ ๊ฐ ํ๋จ ์ฐธ์กฐ |
{
"reviewId" : 1,
"status" : "LIKE"
}
์ข์์ status enum ์ํ๊ฐ
-
์ํ ์์ฒญ์ ํ์ ๊ฐ์ผ๋ก๋ง ์์ฒญ ๊ฐ๋ฅํฉ๋๋ค.
LIKE |
์ข์์ |
DISLIKE |
์ข์์ ํด์ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์ข์์ ๊ฒฐ๊ณผ ๊ฐ ์๋ณ์ |
|
|
์ข์์ ๋์ ๋ฆฌ๋ทฐ์ ์๋ณ์ |
|
|
์ข์์๋ฅผ ๋ฑ๋กํ ์ฌ์ฉ์ ์๋ณ์ |
|
|
์ข์์๋ฅผ ๋ฑ๋กํ ์ฌ์ฉ์ ๋๋ค์ |
|
|
์ ๋ฐ์ดํธ ๋ ์ข์์ ์ํ ๊ฐ |
{
"success" : true,
"code" : 200,
"data" : {
"message" : "์ ์์ ์ผ๋ก ์ข์์ ์ฒ๋ฆฌ ๋์์ต๋๋ค.",
"likesId" : 1,
"reviewId" : 1,
"userId" : 99,
"userNickName" : "ํ์คํ์ค์",
"status" : "LIKE"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 10, 261247702 ],
"serverPathVersion" : "v1"
}
}
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
REVIEW_NOT_EMPTY |
BAD_REQUEST |
๋ฆฌ๋ทฐ ์์ด๋๋ ํ์์ ๋๋ค. |
REVIEW_DISPLAY_STATUS_NOT_EMPTY |
BAD_REQUEST |
๋ฆฌ๋ทฐ ๊ณต๊ฐ/๋น๊ณต๊ฐ์ํ๋ ํ์์ ๋๋ค. |
REQUIRED_USER_ID |
BAD_REQUEST |
์ ์ ์์ด๋๋ ํ์์ ๋๋ค. |
REVIEW_NOT_FOUND |
BAD_REQUEST |
๋ฆฌ๋ทฐ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค |
9. ๋ฆฌ๋ทฐ ๋๊ธ (review reply) ๊ด๋ จ API
9.1. ๋ฆฌ๋ทฐ ๋๊ธ ๋ฑ๋ก
๋ฆฌ๋ทฐ์ ๋๊ธ์ ๋ฑ๋ก ํ๋ API ๋ฌธ์์ ๋๋ค.
PathVariable๋ก ๋๊ธ์ด ์์ฑ๋๋ ๋์ ๋ฆฌ๋ทฐ์ ์๋ณ์๋ฅผ ์ ๋ฌํฉ๋๋ค.
-
๋๊ธ์ ์์๋ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๊ตฌ๋ถ๋ฉ๋๋ค
-
root reply id: ์ต์์ ๋๊ธ ์๋ณ์ -
parent reply id: ์์ ๋๊ธ ์๋ณ์
-
์ต์์ ์๋ณ์์ ๊ฒฝ์ฐ ์๋ฒ์์ ํ์ ํ๊ธฐ ๋๋ฌธ์ ์์ ๋๊ธ ์๋ณ์๋ง ์ ๋ฌ์ด ํ์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด
โโโ ์ฒซ๋ฒ์งธ ๋๊ธ
โโโโโโโ ๋๋ฒ์งธ ๋๊ธ
โโโโโโโ ์ธ๋ฒ์งธ ๋๊ธ
โโโโโ ๋ค๋ฒ์งธ ๋๊ธ
-
์ฒซ๋ฒ์จฐ ๋๊ธ์ ์์/์ต์์ ๋ถ๋ชจ๊ฐ ์๋ ๋๊ธ์ ๋๋ค.
-
๋๋ฒ์งธ ๋๊ธ์ ์์ ๋ถ๋ชจ์ด์ ์ต์์ ๋๊ธ์ ์ฒซ๋ฒ์งธ ๋๊ธ์ ๋๋ค.
-
์ธ๋ฒ์งธ ๋๊ธ์ ์์ ๋ถ๋ชจ๋ ๋๋ฒ์งธ ๋๊ธ์ด๊ณ ์ต์์ ๋๊ธ ์๋ณ์๋ ์ฒซ๋ฒ์งธ ๋๊ธ์ ์๋ณ์์ ๋๋ค.
-
๋ค๋ฒ์งธ ๋๊ธ์ ์์ ๋ถ๋ชจ๋ ์ธ๋ฒ์งธ ๋๊ธ์ด๊ณ ์ต์์ ๋๊ธ ์๋ณ์๋ ์ฒซ๋ฒ์งธ ๋๊ธ์ ์๋ณ์์ ๋๋ค.
-
๊ณ์ธต ๊ตฌ์กฐ๋ ์ดํด๋ฅผ ์ฝ๊ฒ ํ๊ธฐ ์ํ ์์์ด๋ฉฐ ์ค์ ์กฐํ์์๋ ์ต๋ 1Depth๋ก ์กฐํ๋ฉ๋๋ค.
API EndPoint
POST /api/v1/review/reply/register/{reviewId}
| PathVariable | ์ค๋ช |
|---|---|
|
๋ฆฌ๋ทฐ ์๋ณ์ |
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
๋ฑ๋กํ ๋๊ธ ๋ด์ฉ ๋ณธ๋ฌธ |
|
|
|
O |
์์ ๋๊ธ ์๋ณ์ |
{
"content" : "์ด ๋ฆฌ๋ทฐ๋ ๋งค์ฐ ์ ์ตํฉ๋๋ค. ์ถ์ฒ์ ์ค๋งํ๋ค์.",
"parentReplyId" : null
}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์์ฒญ ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์๋ต ๋ฐ์ดํฐ |
|
|
๊ฒฐ๊ณผ ์ฝ๋ ๋ฉ์์ง |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
๋์ ๋ฆฌ๋ทฐ ์๋ณ์ |
|
|
์๋ต ์ผ์ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
{
"success" : true,
"code" : 200,
"data" : {
"codeMessage" : "SUCCESS_REGISTER_REPLY",
"message" : "์ฑ๊ณต์ ์ผ๋ก ๋๊ธ์ ๋ฑ๋กํ์ต๋๋ค.",
"reviewId" : 1,
"responseAt" : "2026-04-08 13:53:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 11, 395605649 ],
"serverPathVersion" : "v1"
}
}
9.2. ๋ฆฌ๋ทฐ ๋๊ธ ์ญ์
๋ฆฌ๋ทฐ์ ๋๊ธ ๋ชฉ๋ก์ ์ญ์ ํ๋ API ๋ฌธ์์ ๋๋ค.
์ฌ์ฉ์์ ์ธ์ฆ ํ ํฐ์ด ํ์์ ์ผ๋ก ํ์ํฉ๋๋ค.
์ญ์ ๋ ๋๊ธ์ ๊ฒฝ์ฐ `๋ ผ๋ฆฌ์ ์ญ์ `๋ก ์ญ์ ๋ ๋๊ธ์ด ํฌํจ๋ ๋ชฉ๋ก์ ์กฐํ ์.
์ญ์ ๋ ๋๊ธ์
๋๋ค ๋ผ๋ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค.
API EndPoint
DELETE /api/v1/review/reply/{reviewId}/{replyId}
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋๊ธ์ ์์ฑ ๋์ ๋ฆฌ๋ทฐ์ ์๋ณ์ |
|
์ญ์ ํ ๋ฆฌ๋ทฐ ์๋ณ์. |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์์ฒญ ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์๋ต ๋ฐ์ดํฐ |
|
|
๊ฒฐ๊ณผ ์ฝ๋ ๋ฉ์์ง |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
๋์ ๋ฆฌ๋ทฐ ์๋ณ์ |
|
|
์๋ต ์ผ์ |
|
|
์๋ฌ ๋ชฉ๋ก |
|
|
๋ฉํ ์ ๋ณด |
{
"success" : true,
"code" : 200,
"data" : {
"codeMessage" : "SUCCESS_DELETE_REPLY",
"message" : "์ฑ๊ณต์ ์ผ๋ก ๋๊ธ์ ์ญ์ ํ์ต๋๋ค.",
"reviewId" : 1,
"responseAt" : "2026-04-08 13:53:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 11, 147589193 ],
"serverPathVersion" : "v1"
}
}
9.3. ์ต์์ ๋ฆฌ๋ทฐ ๋๊ธ ๋ชฉ๋ก ์กฐํ
๋ฆฌ๋ทฐ์ ๋๊ธ ๋ชฉ๋ก์ ์กฐํ ํ๋ API ๋ฌธ์์ ๋๋ค.
PathVariable๋ก ๋๊ธ์ด ์์ฑ๋๋ ๋์ ๋ฆฌ๋ทฐ์ ์๋ณ์๋ฅผ ์ ๋ฌํฉ๋๋ค.
์ต์์ ๋๊ธ ๋ชฉ๋ก๋ง ์กฐํํ๋ api์ ๋๋ค.
-
์ต์์ ๋๊ธ : ๋ถ๋ชจ ๋๊ธ์ด ์๋ ๋๊ธ
๊ตฌ์กฐ ์ ).
-
์ต์์ ๋ฆฌ๋ทฐ ๋๊ธ ๋ชฉ๋ก ์กฐํ API๋ฅผ ํตํด Root Reply์ ์กฐํํฉ๋๋ค. -
ํ์ ๋ฆฌ๋ทฐ ๋๊ธ ๋ชฉ๋ก ์กฐํ API๋ฅผ ํตํด Root Reply์ ๋ํ ๋๋๊ธ์ ์กฐํํฉ๋๋ค.
API EndPoint
GET /api/v1/review/reply/{reviewId}
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋๊ธ์ ์์ฑ ๋์ ๋ฆฌ๋ทฐ์ ์๋ณ์ |
| Parameter | Description |
|---|---|
|
ํ์ด์ง ์ปค์ (์กฐํ๋ฅผ ์์ํ ์์น) |
|
ํ์ด์ง ํฌ๊ธฐ (ํ๋ฒ์ ์กฐํ๋ ๋ฐ์ดํฐ ์) |
์๋ต ํ๋ผ๋ฏธํฐ
-
๋๋ค์๊ณผ ๋ด์ฉ์ ์์๋ก๋ง ๋ด์ฃผ์ธ์ . ๋๋ค์ฑ ๋ฌธ์์ด๋ก ๋ ธ์ถ๋ฉ๋๋ค.
| path | type | description |
|---|---|---|
|
|
์์ฒญ ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์๋ต ๋ฐ์ดํฐ |
|
|
์ ์ฒด ๋๊ธ ๊ฐฏ์ |
|
|
๋๊ธ ์์ฑ์ ์๋ณ์ |
|
|
๋๊ธ ์์ฑ์ ํ๋กํ ์ด๋ฏธ์ง URL |
|
|
๋๊ธ ์์ฑ์ ๋๋ค์ |
|
|
๋๊ธ ์์ฒด ์๋ณ์ |
|
|
๋๊ธ ๋ด์ฉ |
|
|
ํ์ ๋๊ธ ๊ฐฏ์ |
|
|
๋๊ธ ์์ฑ ์ผ์ |
|
|
๋๊ธ ์ํ |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 5,
"reviewReplies" : [ {
"userId" : 0,
"imageUrl" : "https://picsum.photos/500",
"nickName" : "ugGCJbrGWj",
"reviewReplyId" : 0,
"reviewReplyContent" : "pyBxVQjRkvWtqwQsmEHOAbKmoLTnyzprKtssMLabfWPRjQQThZChzZRCIWrORyhegDIJQArRfGhJgDDnufStlgYwyiaSeugMojDEGiNxzllNUcXHOtXGtCNfGUNwAOjeyZwMxyLFNDLdHJIGnLTMWa",
"subReplyCount" : 1,
"status" : null,
"createAt" : [ 2024, 7, 11, 0, 0 ]
}, {
"userId" : 1,
"imageUrl" : "https://picsum.photos/500",
"nickName" : "ERbjtuRDGw",
"reviewReplyId" : 1,
"reviewReplyContent" : "WuKHvvalMeiupsUkXUBOWxScokEnwwKaqzOVrFATtHiapPmEVhdeeEpWrJNbiuPdtMoApwSldDEJmppWdOpXdMUswBnsBRUaJiITWctEECaCmASiwPRQRopxHZukcniMsLPwuHTHuNLTUpNCzVwqod",
"subReplyCount" : 4,
"status" : null,
"createAt" : [ 2024, 7, 11, 0, 0 ]
}, {
"userId" : 2,
"imageUrl" : "https://picsum.photos/500",
"nickName" : "QHIqGiPeER",
"reviewReplyId" : 2,
"reviewReplyContent" : "VgVBQeeHxxAdoDGHHEusBVmNIrBMrIzlyghprGAJIgUwAZITWTHwDhYWCYGEdDHUjgXavTJPMXnKZtCrgJuChsmpkxySknatuoUAtGjRZkkyTePqBOedqUBnBviYiBaMrWjrEgkqOqDPtVCXkporkN",
"subReplyCount" : 2,
"status" : null,
"createAt" : [ 2024, 7, 11, 0, 0 ]
}, {
"userId" : 3,
"imageUrl" : "https://picsum.photos/500",
"nickName" : "XGvDrWgMzf",
"reviewReplyId" : 3,
"reviewReplyContent" : "BuxYjmHFWyfuXjxYfqGiQWvEDdtratZZwxaqlnLXQloDetuIrTKldbLbtiXWLWygvUYeMHpQKbCTBaBmonzoVPPyOiyREMuUhSEhaWkuDnPqqOqkMsPlCOfBVyUIQznroSVrzfFHHBDEfuyBxqlKqN",
"subReplyCount" : 2,
"status" : null,
"createAt" : [ 2024, 7, 11, 0, 0 ]
}, {
"userId" : 4,
"imageUrl" : "https://picsum.photos/500",
"nickName" : "jToyJuRjWP",
"reviewReplyId" : 4,
"reviewReplyContent" : "YLAfujDWiSrkCQWvhMPVJFKFsnEPHyCNKPeucpuTFGbbFDJMDVvpmDPSqNuwLJeGRwvsipspXFvVtRxHONrVDUcHTciqBIwojVEuJNUNvisbbGdOwKRKdXKHCqrCMNSawKxPNQbGTHsKBRecsVGsXA",
"subReplyCount" : 3,
"status" : null,
"createAt" : [ 2024, 7, 11, 0, 0 ]
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 11, 307837876 ],
"serverPathVersion" : "v1"
}
}
9.4. ํ์ ๋ฆฌ๋ทฐ ๋๊ธ ๋ชฉ๋ก ์กฐํ
๋ฆฌ๋ทฐ์ ๋๋๊ธ ๋ชฉ๋ก์ ์กฐํํ๋ API์ ๋๋ค.
๊ฒฝ๋ก์ rootReplyId ๋ ์ต์์ ๋๊ธ ๋ชฉ๋ก ์กฐํ API ํตํด ์กฐํํ ๋๊ธ์ ์๋ณ์๋ฅผ ์ ๋ฌํฉ๋๋ค.
๊ตฌ์กฐ ์ ).
-
์ต์์ ๋ฆฌ๋ทฐ ๋๊ธ ๋ชฉ๋ก ์กฐํ API๋ฅผ ํตํด Root Reply์ ์กฐํํฉ๋๋ค. -
ํ์ ๋ฆฌ๋ทฐ ๋๊ธ ๋ชฉ๋ก ์กฐํ API๋ฅผ ํตํด Root Reply์ ๋ํ ๋๋๊ธ์ ์กฐํํฉ๋๋ค. -
2๋ฒ ๋๊ธ์ ํ์ ๋๊ธ์ ์กฐํ ํ๊ธฐ ์ํด 2๋ฒ ๋๊ธ์ ์๋ณ์๋ฅผ
pathVariable๋ก ์ ๋ฌํฉ๋๋ค -
๋๊ธ์ ๊ด๊ณ๋
์ต์์ ๋๊ธ::ํ์ ๋๊ธ๊ณผ๋ถ๋ชจ ๋๊ธ: ์์ ๋๊ธ๊ด๊ณ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.-
์ต์์ ๋๊ธ::ํ์ ๋๊ธ:1:N์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋๋ค.
์ต์์ ๋๊ธ๋ง ๋์์ด ๋ ์ ์์ต๋๋ค. -
๋ถ๋ชจ ๋๊ธ: ์์ ๋๊ธ: 1:N์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋๋ค.
๋ถ๋ชจ ๋๊ธ์ ์ต์์ ๋๊ธ์ด ์๋์ฌ๋ ๋์์ด ๋ ์ ์์ต๋๋ค.-
2-1๋ฒ ๋๊ธ์ ์์ ๋๊ธ๊ณผ ์ต์์ ๋๊ธ์ ๋ชจ๋ 2๋ฒ ๋๊ธ์ ๋๋ค.
-
2-2๋ฒ ๋๊ธ์ ์์ ๋๊ธ์ 2-1๋ฒ ๋๊ธ์ด๋ฉฐ ์ต์์ ๋๊ธ์ 2๋ฒ ๋๊ธ์ ๋๋ค.
-
2-3๋ฒ ๋๊ธ์ ์์ ๋๊ธ์ 2-1๋ฒ ๋๊ธ์ด๋ฉฐ ์ต์์ ๋๊ธ์ 2๋ฒ ๋๊ธ์ ๋๋ค.
-
2-4๋ฒ ๋๊ธ์ ์์ ๋๊ธ์ 2-3๋ฒ ๋๊ธ์ด๋ฉฐ ์ต์์ ๋๊ธ์ 2๋ฒ ๋๊ธ์ ๋๋ค.
-
-
API EndPoint
GET /api/v1/review/reply/{reviewId}/sub/{rootReplyId}
-
reviewId: ๋ฆฌ๋ทฐ ์๋ณ์ -
rootReplyId: ์ต์์ ๋๊ธ ์๋ณ์
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋๊ธ์ ์์ฑ ๋์ ๋ฆฌ๋ทฐ์ ์๋ณ์ |
|
์ต์์ ๋๊ธ ์๋ณ์ |
| Parameter | Description |
|---|---|
|
ํ์ด์ง ์ปค์ (์กฐํ๋ฅผ ์์ํ ์์น) |
|
ํ์ด์ง ํฌ๊ธฐ (ํ๋ฒ์ ์กฐํ๋ ๋ฐ์ดํฐ ์) |
-
์ ๋ ฌ์
์ต์ ์์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. -
cursor์pageSize์ ๊ธฐ๋ณธ๊ฐ์ ๊ฐ๊ฐ 0 , 50 ์ ๋๋ค
์๋ต ํ๋ผ๋ฏธํฐ
-
๋๋ค์๊ณผ ๋ด์ฉ์ ์์๋ก๋ง ๋ด์ฃผ์ธ์ . ๋๋ค์ฑ ๋ฌธ์์ด๋ก ๋ ธ์ถ๋ฉ๋๋ค.
| path | type | description |
|---|---|---|
|
|
์์ฒญ ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์๋ต ๋ฐ์ดํฐ |
|
|
์ ์ฒด ๋๊ธ ๊ฐฏ์ |
|
|
๋๊ธ ์์ฑ์ ์๋ณ์ |
|
|
๋๊ธ ์์ฑ์ ํ๋กํ ์ด๋ฏธ์ง URL |
|
|
๋๊ธ ์์ฑ์ ๋๋ค์ |
|
|
์ต์์ ๋๊ธ ์๋ณ์ |
|
|
์์ ๋๊ธ ์๋ณ์ |
|
|
์์ ๋๊ธ ์์ฑ์ ๋๋ค์ (@ ๊ธฐํธ๋ ์ ์ธ) |
|
|
๋๊ธ ์์ฒด ์๋ณ์ |
|
|
๋๊ธ ๋ด์ฉ |
|
|
๋๊ธ ์์ฑ ์ผ์ |
|
|
๋๊ธ ์ํ |
|
|
๋ฉํ ์ ๋ณด (ํด๋น ์๋ต ๊ฐ์ ๋ณ๋์ ํ์ด์ง ์ ๋ณด๊ฐ ์ ๊ณต๋์ง ์์ต๋๋ค.) |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 4,
"reviewReplies" : [ {
"userId" : 123,
"imageUrl" : "https://picsum.photos/500",
"nickName" : "PFPCFLXoVT",
"rootReviewId" : 1,
"parentReviewReplyId" : 1,
"parentReviewReplyAuthor" : "@์ฉ์ด๊ฐ๋๋ง๊ณ ",
"reviewReplyId" : 1,
"reviewReplyContent" : "GnXTMSbNWLTipGGmvXpADqPECnglrZiWXHSYZVWsFhFMGDUBFcRRpiCrpMgVaGhtMLNXQMWxfhbfXJZRqOhgzARaHWpQrcAPUtTXlHiyDDeAfzzIetJVJuuPAJtvqGRhtkUctkVCRCjhpBHhtEFCKq",
"status" : null,
"createAt" : [ 2024, 7, 11, 0, 0 ]
}, {
"userId" : 123,
"imageUrl" : "https://picsum.photos/500",
"nickName" : "HyorzrqyIz",
"rootReviewId" : 1,
"parentReviewReplyId" : 1,
"parentReviewReplyAuthor" : "@์ ์ ํ๋ฐ๋๋",
"reviewReplyId" : 2,
"reviewReplyContent" : "ssOJLocwIyQxsIbuBvxUQeuvBTdIbLJhQVNYGXseKLGzzxznWdWnGxwaValJXiFQMIpCCMdwVtkIxHgpRKZXfntdnYSsSruLbvCPZhQAoHUYvjdqBOZaGRexPYfUJqtYhNqMlxzKcFeKllOFFFgBsl",
"status" : null,
"createAt" : [ 2024, 7, 11, 0, 0 ]
}, {
"userId" : 123,
"imageUrl" : "https://picsum.photos/500",
"nickName" : "pDmDotRtpz",
"rootReviewId" : 1,
"parentReviewReplyId" : 1,
"parentReviewReplyAuthor" : "@์ ์ ํ๋ฐ๋๋",
"reviewReplyId" : 3,
"reviewReplyContent" : "hbesyLMJaaKyediTSSWDukKIniTVZJABKYijEiZUyPlyXqPyggDqlncgMBHnultgBdzPZZJpbZQKLAqwhyEhNEZVzZUbccrLRXtnuRSzyXRreabmDsfeXHnEGVRTBkoSNgZlIZfpZGTMNcSdPJKiRj",
"status" : null,
"createAt" : [ 2024, 7, 11, 0, 0 ]
}, {
"userId" : 123,
"imageUrl" : "https://picsum.photos/500",
"nickName" : "KknfCGsJrx",
"rootReviewId" : 1,
"parentReviewReplyId" : 1,
"parentReviewReplyAuthor" : "@์ฉ์ด๊ฐ๋๋ง๊ณ ",
"reviewReplyId" : 4,
"reviewReplyContent" : "fbULGrlJhMBHIbOVuEYwmVAYxftVKDqPQMVWSYafKGDURfVrlRHdkDLniHubgbcGOAwyZVvwLuKtewlHlWPVTZXPbDazfjoANExlxHupCVstOeuajtGAcubleudHlUancNoRjdhCdJKpMdBOtiTQUi",
"status" : null,
"createAt" : [ 2024, 7, 11, 0, 0 ]
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 11, 349730995 ],
"serverPathVersion" : "v1"
}
}
10. ์ง์ (support) ๊ด๋ จ API
10.1. ์ฌ์ฉ์ ์ฐจ๋จ
ํน์ ์ฌ์ฉ์๋ฅผ ์ฐจ๋จํฉ๋๋ค.
POST /api/v1/blocks
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
์ฐจ๋จํ ์ฌ์ฉ์ ID |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์ฐจ๋จ๋ ์ฌ์ฉ์ ์ด ์ |
|
|
์ฐจ๋จ๋ ์ฌ์ฉ์ ๋ชฉ๋ก |
|
|
์ฐจ๋จ๋ ์ฌ์ฉ์ ID |
|
|
์ฐจ๋จ๋ ์ฌ์ฉ์ ์ด๋ฆ |
|
|
์ฐจ๋จ๋ ์๊ฐ |
์ฐจ๋จ ์๋ฃ ํ ํ์ฌ ์ฌ์ฉ์๊ฐ ์ฐจ๋จํ ๋ชจ๋ ์ฌ์ฉ์ ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค.
10.2. ์ฐจ๋จ ํด์
์ฐจ๋จํ ์ฌ์ฉ์๋ฅผ ํด์ ํฉ๋๋ค.
DELETE /api/v1/blocks/{blockedUserId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์ฐจ๋จ ํด์ ํ ์ฌ์ฉ์ ID |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์ฐจ๋จ๋ ์ฌ์ฉ์ ์ด ์ |
|
|
์ฐจ๋จ๋ ์ฌ์ฉ์ ๋ชฉ๋ก |
์ฐจ๋จ ํด์ ํ ํ์ฌ ์ฌ์ฉ์๊ฐ ์ฐจ๋จํ ๋ชจ๋ ์ฌ์ฉ์ ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค.
10.3. ์ฐจ๋จ ๋ชฉ๋ก ์กฐํ
ํ์ฌ ์ฌ์ฉ์๊ฐ ์ฐจ๋จํ ์ฌ์ฉ์๋ค์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
GET /api/v1/blocks
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์ฐจ๋จ๋ ์ฌ์ฉ์ ์ด ์ |
|
|
์ฐจ๋จ๋ ์ฌ์ฉ์ ๋ชฉ๋ก |
|
|
์ฐจ๋จ๋ ์ฌ์ฉ์ ID |
|
|
์ฐจ๋จ๋ ์ฌ์ฉ์ ์ด๋ฆ |
|
|
์ฐจ๋จ๋ ์๊ฐ |
๊ฐ ์ฐจ๋จ๋ ์ฌ์ฉ์์ ID, ์ด๋ฆ, ์ฐจ๋จ ์๊ฐ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค.
10.4. ์ฐจ๋จ ์ฌ์ฉ์ ID ๋ชฉ๋ก ์กฐํ
๋น ๋ฅธ ์ฐจ๋จ ์ฌ๋ถ ํ์ธ์ ์ํด ์ฐจ๋จ๋ ์ฌ์ฉ์ ID๋ง ์กฐํํฉ๋๋ค.
GET /api/v1/blocks/ids
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์ฐจ๋จ๋ ์ฌ์ฉ์ ID ๋ชฉ๋ก |
ํด๋ผ์ด์ธํธ์์ ๋น ๋ฅธ ํํฐ๋ง์ด๋ ๊ถํ ์ฒดํฌ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
10.5. ์ฐจ๋จ ์ฌ๋ถ ํ์ธ
ํน์ ์ฌ์ฉ์๊ฐ ์ฐจ๋จ๋์๋์ง ํ์ธํฉ๋๋ค.
GET /api/v1/blocks/check/{targetUserId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์ฐจ๋จ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ฌ์ฉ์ ID |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์ฐจ๋จ ์ฌ๋ถ |
10.6. ์ํธ ์ฐจ๋จ ์ฌ๋ถ ํ์ธ
๋ ์ฌ์ฉ์๊ฐ ์๋ก ์ฐจ๋จํ๋์ง ํ์ธํฉ๋๋ค.
GET /api/v1/blocks/mutual-check/{targetUserId}
๊ฒฝ๋ก ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
์ํธ ์ฐจ๋จ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ฌ์ฉ์ ID |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์ํธ ์ฐจ๋จ ์ฌ๋ถ |
์ํธ ์ฐจ๋จ ์ํ์์๋ ์์ชฝ ๋ชจ๋ ์๋๋ฐฉ์ ์ฝํ ์ธ ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
10.7. ๋๋ฅผ ์ฐจ๋จํ ์ฌ์ฉ์ ์
ํ์ฌ ์ฌ์ฉ์๋ฅผ ์ฐจ๋จํ ๋ค๋ฅธ ์ฌ์ฉ์๋ค์ ์๋ฅผ ์กฐํํฉ๋๋ค.
GET /api/v1/blocks/stats/blocked-by-count
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
๋๋ฅผ ์ฐจ๋จํ ์ฌ์ฉ์ ์ |
10.8. ๋ด๊ฐ ์ฐจ๋จํ ์ฌ์ฉ์ ์
ํ์ฌ ์ฌ์ฉ์๊ฐ ์ฐจ๋จํ ์ฌ์ฉ์๋ค์ ์๋ฅผ ์กฐํํฉ๋๋ค.
GET /api/v1/blocks/stats/blocking-count
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
๋ด๊ฐ ์ฐจ๋จํ ์ฌ์ฉ์ ์ |
10.9. ์๋ฌ ์ฝ๋
์ฐจ๋จ API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ ์ํฉ์ ๋๋ค.
| ์ฝ๋ | ์ํฉ | ์ค๋ช |
|---|---|---|
400 |
์๊ธฐ ์์ ์ ์ฐจ๋จํ๋ ค๋ ๊ฒฝ์ฐ |
์๊ธฐ ์์ ์ ์ฐจ๋จํ ์ ์์ต๋๋ค. |
400 |
์ด๋ฏธ ์ฐจ๋จ๋ ์ฌ์ฉ์๋ฅผ ๋ค์ ์ฐจ๋จํ๋ ค๋ ๊ฒฝ์ฐ |
์ด๋ฏธ ์ฐจ๋จ๋ ์ฌ์ฉ์์ ๋๋ค. |
404 |
์กด์ฌํ์ง ์๋ ์ฌ์ฉ์๋ฅผ ์ฐจ๋จํ๋ ค๋ ๊ฒฝ์ฐ |
ํด๋น ์ฌ์ฉ์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. |
404 |
์ฐจ๋จํ์ง ์์ ์ฌ์ฉ์๋ฅผ ํด์ ํ๋ ค๋ ๊ฒฝ์ฐ |
์ฐจ๋จ ๊ด๊ณ๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค. |
401 |
์ธ์ฆ๋์ง ์์ ์ฌ์ฉ์ |
๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค. |
-
์ถ๊ฐ๋์ง ์์ ์๋ฌ ์ฝ๋๋ ์์ฒญ ๋ฐ๋๋๋ค.
-
Request validation์ ๋ํ ๋ด์ฉ์ ๊ณตํต ์์ธ๋ฅผ ํตํด ์ฒ๋ฆฌ๋ฉ๋๋ค.
10.10. ์ ์ ์ ๊ณ ์์ฒญ
ํน์ ํ ์ฌ์ฉ์๊ฐ ๋ถ์ ์ ํ ํ๋์ ํ์ ๋, ํด๋น ์ฌ์ฉ์๋ฅผ ์ ๊ณ ํ ์ ์์ต๋๋ค.
user report์ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์ ๊ณ ๋ก,
์ ๊ณ ์์ ํผ์ ๊ณ ์๊ฐ ๋ชจ๋ ์ฌ์ฉ์์ธ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
| ์ ๊ณ ์ ํ ์ฝ๋ | ์ค๋ช |
|---|---|
|
์คํธ |
|
๋ถ์ ์ ํ ์ฝํ ์ธ |
|
์ฌ๊ธฐ |
|
์ ์๊ถ ์นจํด |
|
๊ธฐํ |
์ถ๊ฐ๋๋ฉด ์ข์ ๊ฒ ๊ฐ์ ์ ๊ณ ์ ํ์ด ์์ผ๋ฉด ์์ฒญ ๋ฐ๋๋๋ค.
POST /api/v1/reports/user
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
์ ๊ณ ๋์์ ์ ์ ID(์ ๊ณ ๋ฅผ ๋นํ๋ ์ ์ |
|
|
|
์ ๊ณ ํ์ ( SPAM , INAPPROPRIATE_CONTENT ,FRAUD ,COPYRIGHT_INFRINGEMENT ,OTHER ) |
|
|
|
์ ๊ณ ๋ด์ฉ |
{
"reportUserId" : 2,
"type" : "OTHER",
"content" : "์ ๊ณ ๋ด์ฉ ์ผ๋ผ ์ผ๋ผ ์ผ๋ผ "
}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์ฒ๋ฆฌ๋ ์ ๊ณ ID |
|
|
์ ๊ณ ๋์ ์ ์ ID |
|
|
์ ๊ณ ๋์ ์ ์ ์ด๋ฆ |
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ๊ฐ false์ผ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง(์์ ๊ฒฝ์ฐ null) |
|
|
์๋ฒ ์ธ์ฝ๋ฉ ์ ๋ |
|
|
์๋ฒ ๋ฒ์ |
|
|
์๋ฒ ๊ฒฝ๋ก ๋ฒ์ |
|
|
์๋ฒ ์๋ต ์๊ฐ |
{
"success" : true,
"code" : 200,
"data" : {
"message" : "์ ๊ณ ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ ์๋์์ต๋๋ค.",
"reportId" : 1,
"reportUserId" : 2,
"reportUserName" : "์ ๊ณ ํ ์ ์ ์ด๋ฆ"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 12, 267365213 ],
"serverPathVersion" : "v1"
}
}
| ์ฝ๋ | ์์ธ ์ํฉ | ์๋ฌ ๋ฉ์์ง |
|---|---|---|
400 |
`content`๊ฐ 300์๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ |
"`content`๋ 300์ ์ด๋ด์ฌ์ผ ํฉ๋๋ค." |
400 |
์ ๊ณ ์๊ฐ ์์ ์ ์ ๊ณ ํ๋ ๊ฒฝ์ฐ |
"์์ ์ ์ ๊ณ ํ ์ ์์ต๋๋ค." |
400 |
๋์ผ ์ ์ ์ ๋ํด ์ผ๋น ์ต๋ ํ๊ฑด์ ์ ๊ณ ๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ |
"๋์ผ ์ ์ ์ ๋ํด ์ผ๋น ์ต๋ ํ๊ฑด์ ์ ๊ณ ๋ง ๊ฐ๋ฅํฉ๋๋ค." |
400 |
์ ๊ณ ๋์ ์ฌ์ฉ์๊ฐ ์ผ์ผ ์ ๊ณ ํ์ ์ ํ์ ์ด๊ณผํ๋ ๊ฒฝ์ฐ |
"์ผ์ผ ์ ๊ณ ํ์ ์ ํ์ ์ด๊ณผํ์์ต๋๋ค." |
404 |
์ ๊ณ ๋์ ์ฌ์ฉ์๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ |
"์ ๊ณ ๋์ ์ฌ์ฉ์๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค." |
-
์ถ๊ฐ๋์ง ์์ ์๋ฌ ์ฝ๋๋ ์์ฒญ ๋ฐ๋๋๋ค.
-
request valid์ ๋ํ ๋ด์ฉ์ ๊ณตํต ์์ธ๋ฅผ ํตํด ์ฒ๋ฆฌ๋ฉ๋๋ค.
10.11. ๋ฌธ์ ๊ด๋ฆฌ (help)
10.11.1. ๋ฌธ์๊ธ ์์ฑ
์ฌ์ฉ์๋ ์์คํ ๊ด๋ฆฌ์์๊ฒ ๋ฌธ์๊ธ์ ๋ฑ๋กํ ์ ์์ต๋๋ค.
๋ฌธ์๊ธ ์ ๋ชฉ์ null์ด๊ฑฐ๋ ๊ณต๋ฐฑ("")์ผ ์ ์์ต๋๋ค.
๋ฌธ์๊ธ ๋ด์ฉ์ null์ด๊ฑฐ๋ ๊ณต๋ฐฑ("")์ผ ์ ์์ผ๋ฉฐ, ์ต๋ 1000์๊น์ง ํ์ฉ๋ฉ๋๋ค.
๋ฌธ์๊ธ์ ํ์ ์ ์๋ ํ๋ก ๊ธฐ์ ํ์ต๋๋ค.
| ๋ฌธ์๊ธ ํ์ | ์ค๋ช |
|---|---|
|
์์คํค ๊ด๋ จ ๋ฌธ์ |
|
๋ฆฌ๋ทฐ ๊ด๋ จ ๋ฌธ์ |
|
ํ์ ๊ด๋ จ ๋ฌธ์ |
|
๊ทธ ์ธ ๋ชจ๋ ๋ฌธ์ |
POST /api/v1/help
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
๋ฌธ์๊ธ ์ ๋ชฉ |
|
|
|
๋ฌธ์๊ธ ๋ด์ฉ |
|
|
|
๋ฌธ์๊ธ ํ์ (WHISKEY, REVIEW, USER, ETC) |
|
|
|
์ด๋ฏธ์ง URL ๋ชฉ๋ก |
|
|
|
์ด๋ฏธ์ง ์์ |
|
|
|
์ด๋ฏธ์ง URL |
{
"title" : "๋ฌธ์ ์ ๋ชฉ",
"content" : "๋ก๊ทธ์ธ์ด ์๋ผ์",
"type" : "USER",
"imageUrlList" : [ {
"order" : 1,
"viewUrl" : "https://api.bottle-note.com/images/1"
} ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ฑ๊ณต ๋ฉ์์ง ์ฝ๋ |
|
|
์ฑ๊ณต ๋ฉ์์ง |
|
|
๋ฌธ์๊ธ ์์ด๋ |
|
|
์๋ฒ ์๋ต ์ผ์ |
{
"success" : true,
"code" : 200,
"data" : {
"codeMessage" : "REGISTER_SUCCESS",
"message" : "๋ฌธ์๊ธ ๋ฑ๋ก์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ต๋๋ค",
"helpId" : 1,
"responseAt" : "2026-04-08 13:53:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 12, 22225221 ],
"serverPathVersion" : "v1"
}
}
Error code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
REQUIRED_USER_ID |
BAD_REQUEST |
์ ์ ์์ด๋๊ฐ ํ์ํฉ๋๋ค. |
TITLE_NOT_EMPTY |
BAD_REQUEST |
null์ ๋๋ค. ํ์ดํ(์ ๋ชฉ)์ ์ ๋ ฅํด์ฃผ์ธ์. |
CONTENT_NOT_EMPTY |
BAD_REQUEST |
null์ ๋๋ค. ๋ด์ฉ์ ์ ๋ ฅํด์ฃผ์ธ์." |
REQUIRED_HELP_TYPE |
BAD_REQUEST |
๋ฌธ์ ์ ํ์ ํ์์ ๋๋ค.(WHISKEY, REVIEW, USER, ETC) |
10.11.2. ๋ฌธ์๊ธ ๋ชฉ๋ก์กฐํ
์ฌ์ฉ์๋ ๋ฑ๋กํ ๋ฌธ์๊ธ์ ๋ชฉ๋ก์ ์กฐํํ ์ ์์ต๋๋ค.
๋ก๊ทธ์ธ ํ ์ ์ ๋ง ์กฐํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
QueryParam์ผ๋ก cursor์ pageSize๋ฅผ ์ ๋ฌํ๋ฉฐ, default ๊ฐ์ cursor๋ 0, pageSize๋ 10์ ๋๋ค.
GET /api/v1/help
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ฑ๊ณต ๋ฉ์์ง ์ฝ๋ |
|
|
๋ฌธ์๊ธ ID |
|
|
๋ฌธ์๊ธ ์ ๋ชฉ |
|
|
๋ฌธ์๊ธ ๋ด์ฉ |
|
|
๋ฌธ์๊ธ ๋ฑ๋ก์ผ์ |
|
|
๋ฌธ์๊ธ ์ฒ๋ฆฌ์ํ |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
์กฐํ ์ ๊ธฐ์ค ์ปค์ |
|
|
๋ค์ ํ์ด์ง ์ปค์ |
|
|
์กฐํ๋ ํ์ด์ง ์ฌ์ด์ฆ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 2,
"helpList" : [ {
"helpId" : 1,
"title" : "์ ๋ชฉ1",
"content" : "test1",
"createAt" : [ 2026, 4, 8, 13, 53, 12, 75221192 ],
"helpStatus" : "WAITING"
}, {
"helpId" : 2,
"title" : "์ ๋ชฉ2",
"content" : "test2",
"createAt" : [ 2026, 4, 8, 13, 53, 12, 75237843 ],
"helpStatus" : "WAITING"
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 12, 87650895 ],
"pageable" : {
"currentCursor" : 0,
"cursor" : 1,
"pageSize" : 2,
"hasNext" : false
},
"serverPathVersion" : "v1"
}
}
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
REQUIRED_USER_ID |
BAD_REQUEST |
์ ์ ์์ด๋๊ฐ ํ์ํฉ๋๋ค. |
10.11.3. ๋ฌธ์๊ธ ์์ธ์กฐํ
์ฌ์ฉ์๋ ๋ฑ๋กํ ๋ฌธ์๊ธ ์์ธ์กฐํ ํ ์ ์์ต๋๋ค.
PathVariable๋ก ๋ฌธ์๊ธ์ id๋ฅผ ์ ๋ฌํฉ๋๋ค.
๋ก๊ทธ์ธ ํ ์ ์ ๋ง ์กฐํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์กด์ฌํ์ง ์๋ ๋ฌธ์๊ธ id๋ก ์์ฒญ์ ๋ณด๋ธ ๊ฒฝ์ฐ HELP_NOT_FOUND ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
GET /api/v1/help/{helpId}
์์ฒญ ํ๋ผ๋ฏธํฐ
-
PathVariable๋ก ๋ฌธ์๊ธ์ id๋ฅผ ์ ๋ฌํฉ๋๋ค.
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
๋ฌธ์๊ธ ID |
|
|
๋ฌธ์๊ธ ์ ๋ชฉ |
|
|
๋ฌธ์๊ธ ๋ด์ฉ |
|
|
๋ฌธ์๊ธ ํ์ |
|
|
์ด๋ฏธ์ง ์์ |
|
|
์ด๋ฏธ์ง URL |
|
|
๋ฌธ์๊ธ ๋ฑ๋ก์ผ์ |
|
|
์์คํ ๊ด๋ฆฌ์ ID |
|
|
์์คํ ๊ด๋ฆฌ์ ๋ต๋ณ |
|
|
์ต์ข ์์ ์ผ์ |
|
|
๋ฌธ์๊ธ ์ํ |
{
"success" : true,
"code" : 200,
"data" : {
"helpId" : 1,
"title" : "์์ธ ์ ๋ชฉ",
"content" : "content",
"helpType" : "USER",
"imageUrlList" : [ {
"order" : 1,
"viewUrl" : "https://bottlenote.s3.ap-northeast-2.amazonaws.com/images/1"
} ],
"createAt" : [ 2026, 4, 8, 13, 53, 12, 41869405 ],
"statusType" : null,
"adminId" : null,
"responseContent" : null,
"lastModifyAt" : [ 2026, 4, 8, 13, 53, 12, 41864446 ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 12, 52156702 ],
"serverPathVersion" : "v1"
}
}
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
REQUIRED_USER_ID |
BAD_REQUEST |
์ ์ ์์ด๋๊ฐ ํ์ํฉ๋๋ค. |
HELP_NOT_FOUND |
NOT_FOUND |
๋ฌธ์๊ธ์ ์ฐพ์ ์ ์์ต๋๋ค. |
10.11.4. ๋ฌธ์๊ธ ์์
์ฌ์ฉ์๋ ๋ฑ๋กํ ๋ฌธ์๊ธ์ ์์ ํ ์ ์์ต๋๋ค.
์์ ํ๊ณ ์ ํ๋ ๋ฌธ์๊ธ ์ ๋ชฉ, ๋ด์ฉ, ํ์
์ null์ผ ์ ์์ต๋๋ค
PathVariable๋ก ๋ฌธ์๊ธ์ id๋ฅผ ์ ๋ฌํฉ๋๋ค.
์กด์ฌํ์ง ์๋ ๋ฌธ์๊ธ id๋ก ์์ฒญ์ ๋ณด๋ธ ๊ฒฝ์ฐ HELP_NOT_FOUND ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ก๊ทธ์ธ ํ ์ ์ ๋ง ์์ฒญ์ด ๊ฐ๋ฅํ๋ฉฐ, ๋ฌธ์๊ธ์ ์์ฑ์๊ฐ ์๋ ๊ฒฝ์ฐ HELP_NOT_AUTHORIZED ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
PATCH /api/v1/help/{helpId}
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
๋ฌธ์๊ธ ์ ๋ชฉ |
|
|
|
๋ฌธ์๊ธ ๋ด์ฉ |
|
|
|
๋ฌธ์๊ธ ํ์ (WHISKEY, REVIEW, USER, ETC) |
|
|
|
์ด๋ฏธ์ง URL ๋ชฉ๋ก |
|
|
|
์ด๋ฏธ์ง ์์ |
|
|
|
์ด๋ฏธ์ง URL |
{
"title" : "๋ฌธ์ ์ ๋ชฉ",
"content" : "๋ก๊ทธ์ธ์ด ์๋ผ์",
"type" : "USER",
"imageUrlList" : [ {
"order" : 1,
"viewUrl" : "https://api.bottle-note.com/images/1"
} ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ฑ๊ณต ๋ฉ์์ง ์ฝ๋ |
|
|
์ฑ๊ณต ๋ฉ์์ง |
|
|
๋ฌธ์๊ธ ์์ด๋ |
|
|
์๋ฒ ์๋ต ์ผ์ |
{
"success" : true,
"code" : 200,
"data" : {
"codeMessage" : "MODIFY_SUCCESS",
"message" : "๋ฌธ์๊ธ ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ต๋๋ค",
"helpId" : 1,
"responseAt" : "2026-04-08 13:53:12"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 12, 159529105 ],
"serverPathVersion" : "v1"
}
}
Error code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
REQUIRED_USER_ID |
BAD_REQUEST |
์ ์ ์์ด๋๊ฐ ํ์ํฉ๋๋ค. |
TITLE_NOT_EMPTY |
BAD_REQUEST |
null์ ๋๋ค. ํ์ดํ(์ ๋ชฉ)์ ์ ๋ ฅํด์ฃผ์ธ์. |
CONTENT_NOT_EMPTY |
BAD_REQUEST |
null์ ๋๋ค. ๋ด์ฉ์ ์ ๋ ฅํด์ฃผ์ธ์." |
REQUIRED_HELP_TYPE |
BAD_REQUEST |
๋ฌธ์ ์ ํ์ ํ์์ ๋๋ค.(WHISKEY, REVIEW, USER, ETC) |
HELP_NOT_FOUND |
NOT_FOUND |
๋ฌธ์๊ธ์ ์ฐพ์ ์ ์์ต๋๋ค. |
HELP_NOT_AUTHORIZED |
FORBIDDEN |
๋ฌธ์๊ธ ์์ ๊ถํ์ด ์์ต๋๋ค. |
10.11.5. ๋ฌธ์๊ธ ์ญ์
์ฌ์ฉ์๋ ๋ฑ๋กํ ๋ฌธ์๊ธ์ ์ญ์ ํ ์ ์์ต๋๋ค.
๋ฌผ๋ฆฌ์ ์ผ๋ก ์ญ์ ๋๋ ๊ฒ์ด ์๋ ๋ ผ๋ฆฌ ์ญ์ ๊ฐ ์ํ๋๋ฉฐ status ์ปฌ๋ผ์ด DELETED๋ก ๋ณ๊ฒฝ๋ฉ๋.
PathVariable๋ก ๋ฌธ์๊ธ์ id๋ฅผ ์ ๋ฌํฉ๋๋ค.
์กด์ฌํ์ง ์๋ ๋ฌธ์๊ธ id๋ก ์์ฒญ์ ๋ณด๋ธ ๊ฒฝ์ฐ HELP_NOT_FOUND ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ก๊ทธ์ธ ํ ์ ์ ๋ง ์์ฒญ์ด ๊ฐ๋ฅํ๋ฉฐ, ๋ฌธ์๊ธ์ ์์ฑ์๊ฐ ์๋ ๊ฒฝ์ฐ HELP_NOT_AUTHORIZED ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
PATCH /api/v1/help/{helpId}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ฑ๊ณต ๋ฉ์์ง ์ฝ๋ |
|
|
์ฑ๊ณต ๋ฉ์์ง |
|
|
๋ฌธ์๊ธ ์์ด๋ |
|
|
์๋ฒ ์๋ต ์ผ์ |
{
"success" : true,
"code" : 200,
"data" : {
"codeMessage" : "DELETE_SUCCESS",
"message" : "๋ฌธ์๊ธ ์ญ์ ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ต๋๋ค",
"helpId" : 1,
"responseAt" : "2026-04-08 13:53:12"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 12, 118815863 ],
"serverPathVersion" : "v1"
}
}
Error code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
REQUIRED_USER_ID |
BAD_REQUEST |
์ ์ ์์ด๋๊ฐ ํ์ํฉ๋๋ค. |
HELP_NOT_FOUND |
NOT_FOUND |
๋ฌธ์๊ธ์ ์ฐพ์ ์ ์์ต๋๋ค. |
HELP_NOT_AUTHORIZED |
FORBIDDEN |
๋ฌธ์๊ธ ์ญ์ ๊ถํ์ด ์์ต๋๋ค. |
10.12. ๋น์ฆ๋์ค ๊ด๋ฆฌ (business)
10.12.1. ๋น์ฆ๋์ค ๋ฌธ์ ๋ฑ๋ก
์ฌ์ฉ์๋ ๋น์ง๋์ค ๊ด๋ จ ๋ฌธ์๋ฅผ ๋ฑ๋กํ ์ ์์ต๋๋ค.
POST /api/v1/business-support
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
๋ฌธ์ ์ ๋ชฉ |
|
|
|
๋ฌธ์ ๋ด์ฉ |
|
|
|
์ฐ๋ฝ์ฒ |
|
|
|
๋ฌธ์ ์ ํ (EVENT, ADVERTISEMENT, ETC) |
|
|
|
์ด๋ฏธ์ง URL ๋ชฉ๋ก |
|
|
|
์ด๋ฏธ์ง ์์ |
|
|
|
์ด๋ฏธ์ง URL |
{
"title" : "๋น์ฆ๋์ค ๋ฌธ์ ์ ๋ชฉ",
"content" : "์๋ก์ด ๋น์ฆ๋์ค ๋ฌธ์์
๋๋ค.",
"contact" : "business@example.com",
"businessSupportType" : "EVENT",
"imageUrlList" : [ {
"order" : 1,
"viewUrl" : "https://api.bottle-note.com/image1.jpg"
} ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ฑ๊ณต ๋ฉ์์ง ์ฝ๋ |
|
|
์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
๋ฑ๋ก๋ ๋ฌธ์ ID |
|
|
์๋ฒ ์๋ต ์ผ์ |
{
"success" : true,
"code" : 200,
"data" : {
"codeMessage" : "REGISTER_SUCCESS",
"message" : "๋น์ง๋์ค ๋ฌธ์๊ฐ ๋ฑ๋ก๋์์ต๋๋ค",
"id" : 1,
"responseAt" : "2026-04-08 13:53:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 11, 830525167 ],
"serverPathVersion" : "v1"
}
}
10.12.2. ๋น์ฆ๋์ค ๋ฌธ์ ๋ชฉ๋ก ์กฐํ
์ฌ์ฉ์๋ ๋ฑ๋กํ ๋น์ง๋์ค ๋ฌธ์๊ธ์ ๋ชฉ๋ก์ ์กฐํํ ์ ์์ต๋๋ค.
๋ก๊ทธ์ธ ํ ์ ์ ๋ง ์กฐํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
QueryParam์ผ๋ก cursor์ pageSize๋ฅผ ์ ๋ฌํ๋ฉฐ, default ๊ฐ์ cursor๋ 0, pageSize๋ 10์ ๋๋ค.
GET /api/v1/business-support
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ด ๋ฌธ์ ๊ฐ์ |
|
|
๋ฌธ์ ID |
|
|
๋ฌธ์ ์ ๋ชฉ |
|
|
๋ฌธ์ ๋ด์ฉ |
|
|
๋ฌธ์ ์์ฑ์ผ |
|
|
๋ฌธ์ ์ํ (WAITING, ANSWERED ๋ฑ) |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 2,
"items" : [ {
"id" : 2,
"title" : "๋๋ฒ์งธ ๋ฌธ์ ์ ๋ชฉ",
"content" : "๋๋ฒ์งธ ๋ฌธ์",
"createAt" : [ 2026, 4, 8, 13, 53, 11, 909923640 ],
"status" : "WAITING"
}, {
"id" : 1,
"title" : "์ฒซ๋ฒ์งธ ๋ฌธ์ ์ ๋ชฉ",
"content" : "์ฒซ๋ฒ์งธ ๋ฌธ์",
"createAt" : [ 2026, 4, 7, 13, 53, 11, 910023597 ],
"status" : "SUCCESS"
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 11, 913179248 ],
"serverPathVersion" : "v1"
}
}
10.12.3. ๋น์ฆ๋์ค ๋ฌธ์ ์์ธ ์กฐํ
์ฌ์ฉ์๋ ๋ฑ๋กํ ๋น์ง๋์ค ๋ฌธ์๊ธ ์์ธ์กฐํ ํ ์ ์์ต๋๋ค.
PathVariable๋ก ๋ฌธ์๊ธ์ id๋ฅผ ์ ๋ฌํฉ๋๋ค.
๋ก๊ทธ์ธ ํ ์ ์ ๋ง ์กฐํ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์กด์ฌํ์ง ์๋ ๋ฌธ์๊ธ id๋ก ์์ฒญ์ ๋ณด๋ธ ๊ฒฝ์ฐ HELP_NOT_FOUND ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
GET /api/v1/business-support/{id}
์์ฒญ ํ๋ผ๋ฏธํฐ
-
PathVariable id : ๋ฌธ์ ์์ด๋
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
๋ฌธ์ ID |
|
|
๋ฌธ์ ์ ๋ชฉ |
|
|
๋ฌธ์ ๋ด์ฉ |
|
|
์ฐ๋ฝ์ฒ |
|
|
๋ฌธ์ ์ ํ |
|
|
์ด๋ฏธ์ง URL ๋ชฉ๋ก |
|
|
์ด๋ฏธ์ง ์์ |
|
|
์ด๋ฏธ์ง URL |
|
|
๋ฌธ์ ์์ฑ์ผ |
|
|
๋ฌธ์ ์ํ |
|
|
๋ต๋ณ ๊ด๋ฆฌ์ ID |
|
|
๊ด๋ฆฌ์ ๋ต๋ณ ๋ด์ฉ |
|
|
์ต์ข ์์ ์ผ |
{
"success" : true,
"code" : 200,
"data" : {
"id" : 1,
"title" : "๋ฌธ์ ์์ธ ์ ๋ชฉ",
"content" : "๋ฌธ์ ์์ธ ๋ด์ฉ์
๋๋ค.",
"contact" : "test@example.com",
"businessSupportType" : "EVENT",
"imageUrlList" : [ {
"order" : 1,
"viewUrl" : "https://example.com/image1.jpg"
} ],
"createAt" : [ 2026, 4, 7, 13, 53, 11, 734159807 ],
"status" : "SUCCESS",
"adminId" : 100,
"responseContent" : "๋ต๋ณ ๋๋ฆฝ๋๋ค.",
"lastModifyAt" : [ 2026, 4, 8, 13, 53, 11, 734399074 ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 11, 737117126 ],
"serverPathVersion" : "v1"
}
}
10.12.4. ๋น์ฆ๋์ค ๋ฌธ์ ์์
์ฌ์ฉ์๋ ๋ฑ๋กํ ๋น์ง๋์ค ๋ฌธ์๊ธ์ ์์ ํ ์ ์์ต๋๋ค.
์์ ํ๊ณ ์ ํ๋ ๋ฌธ์๊ธ ์ ๋ชฉ, ๋ด์ฉ, ํ์
์ null์ผ ์ ์์ต๋๋ค
PathVariable๋ก ๋ฌธ์๊ธ์ id๋ฅผ ์ ๋ฌํฉ๋๋ค.
์กด์ฌํ์ง ์๋ ๋ฌธ์๊ธ id๋ก ์์ฒญ์ ๋ณด๋ธ ๊ฒฝ์ฐ HELP_NOT_FOUND ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ก๊ทธ์ธ ํ ์ ์ ๋ง ์์ฒญ์ด ๊ฐ๋ฅํ๋ฉฐ, ๋ฌธ์๊ธ์ ์์ฑ์๊ฐ ์๋ ๊ฒฝ์ฐ HELP_NOT_AUTHORIZED ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
PATCH /api/v1/business-support/{id}
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
์์ ํ ์ ๋ชฉ |
|
|
|
์์ ํ ๋ด์ฉ |
|
|
|
์์ ํ ์ฐ๋ฝ์ฒ |
|
|
|
์์ ํ ๋ฌธ์ ์ ํ |
|
|
|
์์ ํ ์ด๋ฏธ์ง URL ๋ชฉ๋ก |
|
|
|
์ด๋ฏธ์ง ์์ |
|
|
|
์ด๋ฏธ์ง URL |
{
"title" : "์์ ๋ ์ ๋ชฉ",
"content" : "์์ ๋ ๋ด์ฉ์
๋๋ค.",
"contact" : "modified@example.com",
"businessSupportType" : "ADVERTISEMENT",
"imageUrlList" : [ {
"order" : 1,
"viewUrl" : "https://api.bottle-note.com/modified.jpg"
} ]
}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ฑ๊ณต ๋ฉ์์ง ์ฝ๋ |
|
|
์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์์ ๋ ๋ฌธ์ ID |
|
|
์๋ฒ ์๋ต ์ผ์ |
{
"success" : true,
"code" : 200,
"data" : {
"codeMessage" : "MODIFY_SUCCESS",
"message" : "๋น์ง๋์ค ๋ฌธ์๊ฐ ์์ ๋์์ต๋๋ค",
"id" : 1,
"responseAt" : "2026-04-08 13:53:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 11, 879981659 ],
"serverPathVersion" : "v1"
}
}
10.12.5. ๋น์ฆ๋์ค ๋ฌธ์ ์ญ์
์ฌ์ฉ์๋ ๋ฑ๋กํ ๋ฌธ์๊ธ์ ์ญ์ ํ ์ ์์ต๋๋ค.
๋ฌผ๋ฆฌ์ ์ผ๋ก ์ญ์ ๋๋ ๊ฒ์ด ์๋ ๋ ผ๋ฆฌ ์ญ์ ๊ฐ ์ํ๋๋ฉฐ status ์ปฌ๋ผ์ด DELETED๋ก ๋ณ๊ฒฝ๋ฉ๋.
PathVariable๋ก ๋ฌธ์๊ธ์ id๋ฅผ ์ ๋ฌํฉ๋๋ค.
์กด์ฌํ์ง ์๋ ๋ฌธ์๊ธ id๋ก ์์ฒญ์ ๋ณด๋ธ ๊ฒฝ์ฐ HELP_NOT_FOUND ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ก๊ทธ์ธ ํ ์ ์ ๋ง ์์ฒญ์ด ๊ฐ๋ฅํ๋ฉฐ, ๋ฌธ์๊ธ์ ์์ฑ์๊ฐ ์๋ ๊ฒฝ์ฐ HELP_NOT_AUTHORIZED ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
DELETE /api/v1/business-support/{id}
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋ |
|
|
์ฑ๊ณต ๋ฉ์์ง ์ฝ๋ |
|
|
์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ์์ง |
|
|
์ญ์ ๋ ๋ฌธ์ ID |
|
|
์๋ฒ ์๋ต ์ผ์ |
{
"success" : true,
"code" : 200,
"data" : {
"codeMessage" : "DELETE_SUCCESS",
"message" : "๋น์ง๋์ค ๋ฌธ์๊ฐ ์ญ์ ๋์์ต๋๋ค",
"id" : 1,
"responseAt" : "2026-04-08 13:53:11"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 11, 777061622 ],
"serverPathVersion" : "v1"
}
}
11. ํ๋ก์ฐ (follow) ๊ด๋ จ API
11.1. ํ๋ก์ฐ / ์ธํ๋ก์ฐ ์ ๋ฐ์ดํธ
์ ์ ๊ฐ์ ํ๋ก์ฐ, ์ธํ๋ก์ฐ๋ฅผ ํฉ๋๋ค. FOLLOWING, UNFOLLOWING ์ํ๋ฅผ ์ ๋ฐ์ดํธ ํฉ๋๋ค.
| status | ์ค๋ช |
|---|---|
|
ํ๋ก์ฐ ์ํ |
|
์ธํ๋ก์ฐ ์ํ |
API EndPoint
POST /api/v1/follow
์์ฒญ ํ๋ผ๋ฏธํฐ
$ curl 'https://api.bottle-note.com/api/v1/follow?_csrf=mqZNA0RsXxliCdZVY85NID_nu_AV_fGk8aMn-gCrrGSvjB2FqcN1NCBYbXhPPbJlAON5FVzSlsh2n5WJxZoQnjSZylaWtSW2' -i -X POST \
-H 'Content-Type: application/json;charset=UTF-8' \
-d '{
"followUserId" : 1,
"status" : "FOLLOWING"
}'
| path | type | optional | description |
|---|---|---|---|
|
|
ํ๋ก์ฐํ ์ ์ ์ ์์ด๋ |
|
|
|
ํ๋ก์ฐ ์ํ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
ํ๋ก์ฐ ์ ์ ์ ์์ด๋ |
|
|
ํ๋ก์ฐ ์ ์ ์ ๋๋ค์ |
|
|
ํ๋ก์ฐ ์ ์ ํ๋กํ ์ด๋ฏธ์ง URL |
|
|
๋ฉ์์ง |
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ๊ฐ false์ผ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง(์์ ๊ฒฝ์ฐ null) |
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
IS_NO_USER_ID_TO_FOLLOW |
BAD_REQUEST |
ํ๋ก์ฐ ํ ์ ์ ์ ์์ด๋๊ฐ ์์ต๋๋ค. |
SELECT_FOLLOWING_OR_UNFOLLOW |
BAD_REQUEST |
FOLLOWING, UNFOLLOW ์ค ํ๋๋ฅผ ์ ํํด์ฃผ์ธ์. |
USER_NOT_FOUND |
NOT_FOUND |
์ ์ ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. |
CANNOT_FOLLOW_SELF |
BAD_REQUEST |
์๊ธฐ ์์ ์ ํ๋ก์ฐ, ์ธํ๋ก์ฐ ํ ์ ์์ต๋๋ค. |
FOLLOW_NOT_FOUND |
NOT_FOUND |
ํ๋ก์ฐํ ๋์์ ์ฐพ์ ์ ์์ต๋๋ค. |
11.2. ํ๋ก์ ๋ฆฌ์คํธ ์กฐํ
ํ๋ก์ ๋ฆฌ์คํธ ์กฐํ ๊ธฐ๋ฅ์ ๋๋ค.
์์ฒญ ๊ฒฝ๋ก์ ์กฐํํ ์ ์ ์ ์๋ณ์๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค. ์ ์ ์ ์๋ณ์๋ Long ํ์ ์ ๋๋ค.
| PathVariable | ์ค๋ช |
|---|---|
userId |
์ ์ ID |
API EndPoint
ํ๋ก์ ๋ฆฌ์คํธ ์กฐํ : ์กฐํ ๋์ ์ฌ์ฉ์๋ฅผ ํ๋ก์ฐ ํ๊ณ ์๋ ํ ์ ์ ๋ค์ ๋ชฉ๋ก ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
GET /api/v1/follow/{userId}/follower-list
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ก์ or ํ๋ก์ ์กฐํ ์ฌ๋ถ ์ฟผ๋ฆฌํ๋ผ๋ฏธํฐ |
|
์กฐํ ํ ์์ ๊ธฐ์ค ์์น |
|
์กฐํ ํ ํ์ด์ง ์ฌ์ด์ฆ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ด ํ๋ก์ฐ ์ |
|
|
ํ๋ก์ ์ ์ ์ ์์ด๋ |
|
|
ํ๋ก์ฐ ์ ์ ์ ์์ด๋ |
|
|
ํ๋ก์ ์ ์ ์ ๋๋ค์ |
|
|
ํ๋ก์ ์ ์ ์ ํ๋กํ ์ด๋ฏธ์ง URL |
|
|
ํ๋ก์ฐ ์ํ |
|
|
๋ฆฌ๋ทฐ ์ |
|
|
ํ์ ์ |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
์กฐํ ์ ๊ธฐ์ค ์ปค์ |
|
|
๋ค์ ํ์ด์ง ์ปค์ |
|
|
์กฐํ๋ ํ์ด์ง ์ฌ์ด์ฆ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 5,
"followerList" : [ {
"userId" : 1,
"followUserId" : 1,
"followUserNickname" : "nickName1",
"userProfileImage" : "imageUrl1",
"status" : "FOLLOWING",
"reviewCount" : 10,
"ratingCount" : 5
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 9, 977372420 ],
"pageable" : {
"currentCursor" : null,
"cursor" : 0,
"pageSize" : 50,
"hasNext" : false
},
"serverPathVersion" : "v1"
}
}
11.3. ํ๋ก์ ๋ฆฌ์คํธ ์กฐํ
ํ๋ก์ ์ ์ ๋ชฉ๋ก ๋ฆฌ์คํธ ์กฐํ ๊ธฐ๋ฅ์ ๋๋ค.
์์ฒญ ๊ฒฝ๋ก์ ์กฐํํ ์ ์ ์ ์๋ณ์๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค. ์ ์ ์ ์๋ณ์๋ Long ํ์ ์ ๋๋ค.
| PathVariable | ์ค๋ช |
|---|---|
userId |
์ ์ ID |
API EndPoint
ํ๋ก์ ๋ฆฌ์คํธ ์กฐํ : ์กฐํ ๋์ ์ฌ์ฉ์๊ฐ ํ๋ก์ํ ์ ์ ๋ชฉ๋ก ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
GET /api/v1/follow/{userId}/following-list
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
ํ๋ก์ or ํ๋ก์ ์กฐํ ์ฌ๋ถ ์ฟผ๋ฆฌํ๋ผ๋ฏธํฐ |
|
์กฐํ ํ ์์ ๊ธฐ์ค ์์น |
|
์กฐํ ํ ํ์ด์ง ์ฌ์ด์ฆ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ด ํ๋ก์ฐ ์ |
|
|
ํ๋ก์ ์ ์ ์ ์์ด๋ |
|
|
ํ๋ก์ฐ ์ ์ ์ ์์ด๋ |
|
|
ํ๋ก์ ์ ์ ์ ๋๋ค์ |
|
|
ํ๋ก์ ์ ์ ์ ํ๋กํ ์ด๋ฏธ์ง URL |
|
|
ํ๋ก์ฐ ์ํ |
|
|
๋ฆฌ๋ทฐ ์ |
|
|
ํ์ ์ |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
์กฐํ ์ ๊ธฐ์ค ์ปค์ |
|
|
๋ค์ ํ์ด์ง ์ปค์ |
|
|
์กฐํ๋ ํ์ด์ง ์ฌ์ด์ฆ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 5,
"followerList" : [ {
"userId" : 1,
"followUserId" : 1,
"followUserNickname" : "nickName1",
"userProfileImage" : "imageUrl1",
"status" : "FOLLOWING",
"reviewCount" : 10,
"ratingCount" : 5
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 9, 977372420 ],
"pageable" : {
"currentCursor" : null,
"cursor" : 0,
"pageSize" : 50,
"hasNext" : false
},
"serverPathVersion" : "v1"
}
}
12. ๋ณ์ (rating) ๊ด๋ จ API
12.1. ๋ณ์ ๋ชฉ๋ก ์กฐํ
๋ณ์ ์กฐํ๋ฅผ ์ํ API ์ ๋๋ค.
๋ฉ๋ด๋ฐ์ ํ๋จ ๋ณ์ ํ์ด์ง๋ฅผ ์ํ API ์
๋๋ค.
GET /api/v1/rating
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๊ฒ์์ด |
|
์นดํ ๊ณ ๋ฆฌ (category API ์ฐธ์กฐ) |
|
์ง์ญ ID (region API ์ฐธ์กฐ) |
|
์ ๋ ฌ ํ์ (ํด๋น ๋ฌธ์ ํ๋จ enum ์ฐธ์กฐ) |
|
์ ๋ ฌ ์์(ํด๋น ๋ฌธ์ ํ๋จ enum ์ฐธ์กฐ) |
|
์กฐํ ํ ์์ ๊ธฐ์ค ์์น |
|
์กฐํ ํ ํ์ด์ง ์ฌ์ด์ฆ |
{
"keyword" : "์ผ๋ง์ํค",
"category" : "SINGLE_MALT",
"regionId" : 1,
"sortType" : "RANDOM",
"sortOrder" : "DESC",
"cursor" : 0,
"pageSize" : 10
}
-
์์ฒญ๊ฐ์ ํํ๋ parameter ํ์์ผ๋ก ์์ฒญ๋๋ฉด ๋ฉ๋๋ค.(์์๋ ํํ์ ์ํ JSON ํํ์ ๋๋ค.)
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์ ์ฒด ์ ๋ฆฌ์คํธ์ ํฌ๊ธฐ |
|
|
์ ID |
|
|
์ ์ด๋ฏธ์ง URL |
|
|
์ ํ๊ธ ์ด๋ฆ |
|
|
์ ์๋ฌธ ์ด๋ฆ |
|
|
์ ํ๊ธ ์นดํ ๊ณ ๋ฆฌ ์ด๋ฆ |
|
|
์ ์๋ฌธ ์นดํ ๊ณ ๋ฆฌ ์ด๋ฆ |
|
|
์ ์ฐ ์ฌ๋ถ |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
์กฐํ ์ ๊ธฐ์ค ์ปค์ |
|
|
๋ค์ ํ์ด์ง ์ปค์ |
|
|
์กฐํ๋ ํ์ด์ง ์ฌ์ด์ฆ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ๊ฒ์์ด |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์นดํ ๊ณ ๋ฆฌ |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ง์ญ ID |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ ๋ ฌ ํ์ |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ ๋ ฌ ์์ |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ์ปค์ ๊ธฐ์ค |
|
|
๊ฒ์ ์ ์ฌ์ฉ ํ ํ์ด์ง ์ฌ์ด์ฆ |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 10,
"ratings" : [ {
"alcoholId" : 0,
"imageUrl" : "nonImage",
"korName" : "๊ธ๋ ์๋ผํค",
"engName" : "Glen Araki",
"korCategoryName" : "์ฑ๊ธ ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"isPicked" : true
}, {
"alcoholId" : 1,
"imageUrl" : "nonImage",
"korName" : "๊ธ๋ ์๋ผํค",
"engName" : "Glen Araki",
"korCategoryName" : "์ฑ๊ธ ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"isPicked" : false
}, {
"alcoholId" : 2,
"imageUrl" : "nonImage",
"korName" : "๊ธ๋ ์๋ผํค",
"engName" : "Glen Araki",
"korCategoryName" : "์ฑ๊ธ ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"isPicked" : true
}, {
"alcoholId" : 3,
"imageUrl" : "nonImage",
"korName" : "๊ธ๋ ์๋ผํค",
"engName" : "Glen Araki",
"korCategoryName" : "์ฑ๊ธ ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"isPicked" : false
}, {
"alcoholId" : 4,
"imageUrl" : "nonImage",
"korName" : "๊ธ๋ ์๋ผํค",
"engName" : "Glen Araki",
"korCategoryName" : "์ฑ๊ธ ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"isPicked" : true
}, {
"alcoholId" : 5,
"imageUrl" : "nonImage",
"korName" : "๊ธ๋ ์๋ผํค",
"engName" : "Glen Araki",
"korCategoryName" : "์ฑ๊ธ ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"isPicked" : false
}, {
"alcoholId" : 6,
"imageUrl" : "nonImage",
"korName" : "๊ธ๋ ์๋ผํค",
"engName" : "Glen Araki",
"korCategoryName" : "์ฑ๊ธ ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"isPicked" : true
}, {
"alcoholId" : 7,
"imageUrl" : "nonImage",
"korName" : "๊ธ๋ ์๋ผํค",
"engName" : "Glen Araki",
"korCategoryName" : "์ฑ๊ธ ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"isPicked" : false
}, {
"alcoholId" : 8,
"imageUrl" : "nonImage",
"korName" : "๊ธ๋ ์๋ผํค",
"engName" : "Glen Araki",
"korCategoryName" : "์ฑ๊ธ ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"isPicked" : true
}, {
"alcoholId" : 9,
"imageUrl" : "nonImage",
"korName" : "๊ธ๋ ์๋ผํค",
"engName" : "Glen Araki",
"korCategoryName" : "์ฑ๊ธ ๋ชฐํธ",
"engCategoryName" : "Single Malt",
"isPicked" : false
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 10, 497488172 ],
"pageable" : {
"currentCursor" : 0,
"cursor" : 0,
"pageSize" : 10,
"hasNext" : false
},
"searchParameters" : {
"keyword" : null,
"category" : null,
"regionId" : null,
"sortType" : "RANDOM",
"sortOrder" : "DESC",
"cursor" : 0,
"pageSize" : 10
},
"serverPathVersion" : "v1"
}
}
์ ๋ ฌ ํ์ (sortType)
| type | description |
|---|---|
RANDOM |
๋๋ค |
POPULAR |
์ธ๊ธฐ |
RATING |
๋ณ์ |
PICK |
์ฐํ๊ธฐ |
REVIEW |
๋ฆฌ๋ทฐ |
-
ํด๋น ๊ฐ์ด ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ POPULAR ์ ๋๋ค.
-
ํ์ ์ด ์๋ชป ์ ๋ฌ๋ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐํ๋ฉ๋๋ค.
์ ๋ ฌ ๋ฐฉํฅ (sortOrder)
-
ํด๋น ์ ์๋ ์ ๋ ฌ ๋ฐฉํฅ์ ๋ํ๋ด๋ ๊ฐ์ ๋๋ค.
-
์๋น์ค์ ๋ชจ๋ ์ ๋ ฌ ๊ด๋ จ API์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
DESC |
๋ด๋ฆผ์ฐจ์ |
5 → 3 → 2 → 1 |
ASC |
์ค๋ฆ์ฐจ์ |
1 → 2 → 3 → 5 |
-
๋๋ค์ ๊ฒฝ์ฐ ์ ๋ ฌ ํ์ ์ ๋ฐ๋ผ ์๋์ ๋ค๋ฅด๊ฒ ๋์ ํ ์ ์์ต๋๋ค.
-
ํด๋น ๊ฐ์ด ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ DESC(๋ด๋ฆผ์ฐจ์) ์ ๋๋ค.
-
ํ์ ์ด ์๋ชป ์ ๋ฌ๋ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐํ๋ฉ๋๋ค.
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
REQUEST_USER_ID |
BAD_REQUEST |
์์ฒญํ ์ ์ ID๊ฐ ๋ถ์ ์ ํฉ๋๋ค. |
12.2. ์ ์ ์ ๋ณ์ ์กฐํ
ํน์ ํ ์ฌ์ฉ์๊ฐ ํน์ ํ ์์คํค์ ๋ํด์ ์ค ๋ณ์ ์ ์กฐํํฉ๋๋ค.
ํ์์ ์ผ๋ก ํ ํฐ์ด ํ์ํฉ๋๋ค. ๋ง์ฝ ๋ฑ๋ก๋ ๊ฐ์ด ์์ ๊ฒฝ์ฐ 0.0์ ๋ฐํํฉ๋๋ค.
-
์ ํจํ์ง ์์ ์์คํค ์๋ณ์์ผ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐํ๋ฉ๋๋ค. (์๋ ์์ ๊ฒฝ๋ก์
-1๋ฅผ ๋ฃ์์ ๊ฒฝ์ฐ)
{
"success": false,
"code": 400,
"data": [],
"errors": {
"message": "์์คํค๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค."
}
}
-
์ ํจํ์ง ์์ ์ฌ์ฉ์ ์๋ณ์์ผ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐํ๋ฉ๋๋ค. (์๋ ์์ ๊ฒฝ๋ก์
-1๋ฅผ ๋ฃ์์ ๊ฒฝ์ฐ)
{
"success": false,
"code": 400,
"data": [],
"errors": {
"message": "์์ฒญํ ์ ์ ID๊ฐ ๋ถ์ ์ ํฉ๋๋ค."
}
}
GET /api/v1/rating/{{alcoholId}}
์์ฒญ ํ๋ผ๋ฏธํฐ
| Parameter | Description |
|---|---|
|
๋ณ์ ์ ์กฐํํ ์์คํค์ ์๋ณ์ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
๋ฑ๋ก๋ ๋ณ์ |
|
|
๋ณ์ ์ ์ค ์์คํค์ ์๋ณ์ |
|
|
๋ณ์ ์ ์ค ์ ์ ์ ์๋ณ์ |
{
"success" : true,
"code" : 200,
"data" : {
"rating" : 5.0,
"alcoholId" : 1,
"userId" : 3
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 10, 552621752 ],
"serverPathVersion" : "v1"
}
}
12.3. ๋ณ์ ๋ฑ๋ก
๋ณ์ ๋ฑ๋ก์ ์ํ API ์ ๋๋ค.
๋ณ์ ๋ฑ๋ก ์ Acsess Token์ด ํ์์ ์ผ๋ก ํ์ํฉ๋๋ค.
POST /api/v1/rating/register
์์ฒญ ํ๋ผ๋ฏธํฐ
| path | type | optional | description |
|---|---|---|---|
|
|
๋ณ์ ์ ์ค ์์คํค์ ์๋ณ์ |
|
|
|
๋ณ์ ( 0.0 ~ 5.0 ์ฌ์ด์ ๊ฐ) |
{
"alcoholId" : 1,
"rating" : 5.0
}
-
๋ณ์ ์ ๊ฒฝ์ฐ 0.5 ๋จ์์ ๊ฐ๋ง ์์ฒญ ๊ฐ๋ฅํฉ๋๋ค.
-
๋ณ์ ์ ๋ฒ์๋ 0.0 ~ 5.0 ์ ๋๋ค.
-
0.0์ผ๋ก ์ ๋ฐ์ดํธ ์ ์ดํ ์กฐํ ์์ ๋ฐํ๋๋ ๊ฐ์
null๋ฐํ๋๋ค.
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
๋ฑ๋ก๋ ๋ณ์ |
|
|
๊ฒฐ๊ณผ ๋ฉ์์ง |
{
"success" : true,
"code" : 200,
"data" : {
"rating" : "5.0",
"message" : "๋ณ์ ๋ฑ๋ก ์ฑ๊ณต"
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 10, 460293002 ],
"serverPathVersion" : "v1"
}
}
Error Code
-
ํด๋น API ์์ฒญ ์ ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ์ค๋ช ํฉ๋๋ค.
| ์ฝ๋ | ์ํ | ์ค๋ช |
|---|---|---|
ALCOHOL_ID_REQUIRED |
BAD_REQUEST |
์์ฝ์ฌ ์๋ณ์๋ ํ์์ ๋๋ค. |
RATING_REQUIRED |
BAD_REQUEST |
๋ณ์ ์ ํ์์ ๋๋ค. |
REQUIRED_USER_ID |
BAD_REQUEST |
์ ์ ์์ด๋๋ ํ์์ ๋๋ค. |
USER_NOT_FOUND |
NOT_FOUND |
์ ์ ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. |
ALCOHOL_NOT_FOUND |
NOT_FOUND |
๋ฆฌ๋ทฐ ๋์ ์์ฝ์ด ์กด์ฌํ์ง ์์ต๋๋ค. |
13. ํ์คํ ๋ฆฌ(user history) ๊ด๋ จ API
13.1. ์ ์ ํ์คํ ๋ฆฌ ๋ชฉ๋ก ์กฐํ
๊ฒ์ ์กฐ๊ฑด์ผ๋ก ์ ์ ์ ํ์คํ ๋ฆฌ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค.
์์ฒญ ํ๋ผ๋ฏธํฐ
$ http GET 'https://api.bottle-note.com/api/v1/history/1?keyword=%EA%B8%80%EB%A0%8C%ED%94%BC%EB%94%95&ratingPoint=5&historyReviewFilterType=ALL&picksStatus=PICK&startDate=2026-04-01T13%3A53%3A10.092428781&endDate=2026-04-08T13%3A53%3A10.092482261&sortOrder=DESC&cursor=1&pageSize=3' \
'Content-Type:application/json;charset=UTF-8'
| Parameter | Description |
|---|---|
|
๊ฒ์ ํค์๋ |
|
ํ์ ๊ธฐ์ค์ (์: 3.0) |
|
ํํฐ๋ง ์ ํ (์: ALL, BEST_REVIEW, REVIEW_LIKE, REVIEW_REPLY) |
|
ํฝ(pick) ์ํ (์: PICK, UNPICK ๋ฑ) |
|
ํ์คํ ๋ฆฌ ์กฐํ ์์ ์ผ์ (yyyy-MM-dd) |
|
ํ์คํ ๋ฆฌ ์กฐํ ์ข ๋ฃ ์ผ์ (yyyy-MM-dd) |
|
์ ๋ ฌ ์์ (ASC ๋๋ DESC) |
|
ํ์ฌ ์ปค์(ํ์ด์ง์ฉ) |
|
ํ์ด์ง ์ฌ์ด์ฆ |
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ๊ฐ false์ผ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง ๋ชฉ๋ก (์์ ๊ฒฝ์ฐ ๋น ๋ฐฐ์ด) |
|
|
์ ์ฒด ํ์คํ ๋ฆฌ ๊ฐ์ |
|
|
(๊ตฌ๋ ๋๋ ๊ฐ์ ๋ฑ) ๊ด๋ จ ์ผ์ |
|
|
ํ์คํ ๋ฆฌ ์์ธ ๋ชฉ๋ก |
|
|
ํ์คํ ๋ฆฌ ID |
|
|
ํ์คํ ๋ฆฌ ์์ฑ ์๊ฐ(yyyy-MM-dd’T’HH:mm:ss) |
|
|
์ด๋ฒคํธ ์นดํ ๊ณ ๋ฆฌ |
|
|
์ด๋ฒคํธ ํ์ |
|
|
์ ID (์์ ๊ฒฝ์ฐ null) |
|
|
์ ์ด๋ฆ |
|
|
์ด๋ฏธ์ง URL |
|
|
๋ฆฌ๋ค์ด๋ ํธ URL |
|
|
ํ์คํ ๋ฆฌ ์ปจํ ์ธ |
|
|
๋์ ์ผ๋ก ๊ตฌ์ฑ๋๋ ๋ฉ์์ง ๋ด์ฉ(key-value) |
|
|
๋์ ๋ฉ์์ง์ ํ์ฌ ๊ฐ |
|
|
ํ์ด์ง ์ ๋ณด |
|
|
์กฐํ ์ ๊ธฐ์ค ์ปค์ |
|
|
๋ค์ ํ์ด์ง ์ปค์ |
|
|
์กฐํ๋ ํ์ด์ง ์ฌ์ด์ฆ |
|
|
๋ค์ ํ์ด์ง ์กด์ฌ ์ฌ๋ถ |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 5,
"subscriptionDate" : [ 2026, 4, 8, 13, 53, 10, 90729614 ],
"userHistories" : [ {
"historyId" : 1,
"createdAt" : [ 2026, 4, 8, 13, 53, 10, 90103914 ],
"eventCategory" : "PICK",
"eventType" : "IS_PICK",
"alcoholId" : 1,
"alcoholName" : "์์ฃผ",
"imageUrl" : "imageUrl",
"redirectUrl" : "redirectUrl",
"content" : null,
"dynamicMessage" : null
}, {
"historyId" : 1,
"createdAt" : [ 2026, 4, 8, 13, 53, 10, 90684760 ],
"eventCategory" : "RATING",
"eventType" : "REVIEW_CREATE",
"alcoholId" : 1,
"alcoholName" : "์์ฃผ",
"imageUrl" : "imageUrl",
"redirectUrl" : "redirectUrl",
"content" : null,
"dynamicMessage" : {
"currentValue" : "4.0"
}
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 10, 105653640 ],
"pageable" : {
"currentCursor" : 0,
"cursor" : 4,
"pageSize" : 3,
"hasNext" : true
},
"serverPathVersion" : "v1"
}
}
์ ๋ ฌ ๋ฐฉํฅ (sortOrder)
-
ํด๋น ์ ์๋ ์ ๋ ฌ ๋ฐฉํฅ์ ๋ํ๋ด๋ ๊ฐ์ ๋๋ค.
-
์๋น์ค์ ๋ชจ๋ ์ ๋ ฌ ๊ด๋ จ API์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
DESC |
๋ด๋ฆผ์ฐจ์ |
5 → 3 → 2 → 1 |
ASC |
์ค๋ฆ์ฐจ์ |
1 → 2 → 3 → 5 |
-
๋๋ค์ ๊ฒฝ์ฐ ์ ๋ ฌ ํ์ ์ ๋ฐ๋ผ ์๋์ ๋ค๋ฅด๊ฒ ๋์ ํ ์ ์์ต๋๋ค.
-
ํด๋น ๊ฐ์ด ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ DESC(๋ด๋ฆผ์ฐจ์) ์ ๋๋ค.
-
ํ์ ์ด ์๋ชป ์ ๋ฌ๋ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐํ๋ฉ๋๋ค. === ์ ์ ์์ฝ์ฌ ์กฐํ ํ์คํ ๋ฆฌ ์กฐํ ===
์ฌ์ฉ์๊ฐ ์กฐํํ ์์ฝ์ฌ ๋ชฉ๋ก์ ํ์คํ ๋ฆฌ ํํ๋ก ์กฐํํฉ๋๋ค.
์์ฒญ ํ๋ผ๋ฏธํฐ
$ curl 'https://api.bottle-note.com/api/v1/history/view/alcohols' -i -X GET \
-H 'Content-Type: application/json;charset=UTF-8'
์๋ต ํ๋ผ๋ฏธํฐ
| path | type | description |
|---|---|---|
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ |
|
|
์๋ต ์ฝ๋(http status code) |
|
|
์๋ต ์ฑ๊ณต ์ฌ๋ถ๊ฐ false์ผ ๊ฒฝ์ฐ ์๋ฌ ๋ฉ์์ง ๋ชฉ๋ก (์์ ๊ฒฝ์ฐ ๋น ๋ฐฐ์ด) |
|
|
์ ์ฒด ์กฐํ ์์ฝ์ฌ ๊ฐ์ |
|
|
์์ฝ์ฌ ID |
|
|
์์ฝ์ฌ ํ๊ธ ์ด๋ฆ |
|
|
์์ฝ์ฌ ์์ด ์ด๋ฆ |
|
|
ํ์ |
|
|
ํ์ ๊ฐ์ |
|
|
์นดํ ๊ณ ๋ฆฌ ํ๊ธ๋ช |
|
|
์นดํ ๊ณ ๋ฆฌ ์๋ฌธ๋ช |
|
|
์์ฝ์ฌ ์ด๋ฏธ์ง URL |
|
|
์ฌ์ฉ์ ์ฐ ์ฌ๋ถ |
|
|
์์ฝ์ฌ ์ธ๊ธฐ๋ ์ ์ |
{
"success" : true,
"code" : 200,
"data" : {
"totalCount" : 3,
"items" : [ {
"alcoholId" : 1,
"korName" : "๊ธ๋ ํผ๋",
"engName" : "engName",
"rating" : 1.0,
"ratingCount" : 47,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : false,
"popularScore" : 0.0
}, {
"alcoholId" : 2,
"korName" : "๊ธ๋ ํผ๋",
"engName" : "engName",
"rating" : 0.0,
"ratingCount" : 64,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : true,
"popularScore" : 0.0
}, {
"alcoholId" : 3,
"korName" : "๊ธ๋ ํผ๋",
"engName" : "engName",
"rating" : 0.5,
"ratingCount" : 75,
"korCategory" : "์ฑ๊ธ ๋ชฐํธ",
"engCategory" : "single molt",
"imageUrl" : "https://i.imgur.com/TE2nmYV.png",
"isPicked" : false,
"popularScore" : 0.0
} ]
},
"errors" : [ ],
"meta" : {
"serverVersion" : "1.0.0",
"serverEncoding" : "UTF-8",
"serverResponseTime" : [ 2026, 4, 8, 22, 53, 10, 167668109 ],
"serverPathVersion" : "v1"
}
}