Skip to content

Instantly share code, notes, and snippets.

@therne
Last active December 30, 2015 22:49
Show Gist options
  • Select an option

  • Save therne/7896258 to your computer and use it in GitHub Desktop.

Select an option

Save therne/7896258 to your computer and use it in GitHub Desktop.
Clutch API Documentation

Clutch Application Server

ํด๋Ÿฌ์น˜ ์„œ๋น„์Šค์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์ด๋‹ค.

์„œ๋ฒ„ ์–ธ์–ด๋กœ๋Š” Node.js๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ExpressJs ๋ฐ ejs๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API์™€ ์›น ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„์œผ๋กœ๋Š” MongoDB, ๋“œ๋ผ์ด๋ฒ„๋กœ๋Š” mongoose๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋‹จ์—์„œ ์„œ๋ฒ„๋กœ์˜ ๋ชจ๋“  ํ˜ธ์ถœ์€ ๋น„๋™๊ธฐ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ(Asynchronize), ์„œ๋ฒ„๋Š” ๊ทธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด JSON ํ˜•ํƒœ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ HTTP ์‘๋‹ต ํ˜•ํƒœ(application/json)๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์„œ๋ฒ„์—์„œ ๊ฐ๊ฐ์˜ REST ๋ฉ”์„œ๋“œ์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ๋Š” ์„œ๋กœ ๋Œ€์‘๋œ๋‹ค.

Base Server Information

Main URL : http://dev.thedeblur.com:1129

์„œ๋น„์Šค ์˜คํ”ˆ ์ „๊นŒ์ง€ ์ž„์‹œ๋กœ Deblur์˜ ๊ฐœ๋ฐœ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

REST API BASICS

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋“ค์ด ์กด์žฌํ•œ๋‹ค.
GET : ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜, ๋ฆฌ์ŠคํŒ…ํ•œ๋‹ค.
POST : ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
PATCH : ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.
PATCH : ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.
PUT : ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์— ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•œ๋‹ค.

ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์ ‘๊ทผ์ด ์ œํ•œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ธ์ฆํ•  ๋•Œ(token) ๋นผ๊ณ ๋Š” ์—†์œผ๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” GET์—์„œ๋Š” Query(x=1&y=2)๋กœ, POST, PATCH, DELETE์—์„œ๋Š” FormUrlEncoded๋กœ ์ „๋‹ฌ๋œ๋‹ค.

Response์˜ ํƒ€์ž…์€ ๋ฌด์กฐ๊ฑด application/json์ด๋ฉฐ, API ํ˜ธ์ถœ ๊ฒฐ๊ณผ์ธ status๋ผ๋Š” ํ•ญ๋ชฉ์„ ํฌํ•จํ•œ๋‹ค.

Sample JSON Response
{
    "status" : {
        "code" : "200",
        "message" : "์„ฑ๊ณต"
    },
    "key" : โ€œvalue",
    "key" : โ€œvalueโ€,
    (....)
}
API STATUS CODE
Code Status Message
200 SUCCEED ์„ฑ๊ณต
400 FAILED ์‹คํŒจ (์„œ๋ฒ„ ๋‚ด๋ถ€ ์˜ค๋ฅ˜)
411 FAILED_LESS_PARAMETER ํŒŒ๋ผ๋ฏธํ„ฐ ๋ถ€์กฑ
1000 FAILED_DB_CONNECTION ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด๋ถ€ ์˜ค๋ฅ˜
401 FAILED_NO_PERMISSION ๊ถŒํ•œ ๋ถ€์กฑ
402 FAILED_TOKEN_INVALID Auth ํ† ํฐ ๋ถˆ์ผ์น˜
1001 FAILED_ACCOUNT_INVALID ๊ณ„์ • ๋ถˆ์ผ์น˜
1002 FAILED_ALREADY_EXISTS ์•„์ด๋””๊ฐ€ ์ด๋ฏธ ์กด์žฌ

์ด ์ฝ”๋“œ๋“ค์€ ํด๋ผ์ด์–ธํŠธ์˜ Clutch.Status ํด๋ž˜์Šค์™€ ์„œ๋ฒ„์˜ status.json์— ๋ชจ๋‘ ์ •์˜๋˜์–ด ์žˆ๋‹ค.

API OVERVIEW

###METADATA STORE

  • PUT /pictures
  • GET /pictures/full/:metadataId
  • GET /pictures/thumb/:metadataId
  • GET /pictures/custom/:metadataId/:width/:height

###USER

  • POST /user/register
  • POST /user/login
  • GET /user/:id
  • GET /user/:id/picture
  • POST /user/:id/picture
  • GET /user/:id/star
  • POST /user/:id/star
  • GET /user/:id/followers
  • GET /user/:id/followings
  • POST /user/:id/followings
  • DELETE /user/:id/followings
  • PATCH /user/:id
  • PATCH /user/:id/star
  • DELETE /user/:id

###Clutch

  • GET /clutch
  • POST /clutch
  • DELETE /clutch/:id
  • POST /clutch/:id/like
  • GET /clutch/:id/comments
  • POST /clutch/:id/comments
  • DELETE /clutch/:id/comments/:commentId

###Clutch Book

  • GET /user/:id/cb
  • POST /user/:id/cb
  • GET /user/:id/cb/:cbId
  • PUT /user/:id/cb/:cbId
  • DELETE /user/:id/cb/:cbId
  • GET /user/:id/cb/:cbId/followers
  • GET /user/:id/cb/:cbId/followings
  • POST /user/:id/cb/:cbId/followings

###Community

  • GET /community
  • POST /community/:articleId/
  • PUT /community/:articleId/
  • DELETE /community/:articleId/
  • POST /community/:articleId/like
  • GET /community/:articleId/
  • GET /community/:articleId/comments
  • POST /community/:articleId/comments
  • DELETE /community/:articleId/comments/:commentId

###Artist

  • GET /artist/:artistId/

###Notification

  • GET /notifications/me
  • GET /notifications/friends

###Ranking

  • GET /ranking/
  • GET /ranking/:date/details

###Settings

  • GET /user/:id/settings/:key
  • POST /user/:id/settings/:key

2. User

NOTE

์œ ์ €์˜ ๊ฐœ์ธ์ ์ธ ์ •๋ณด์— ์ ‘๊ทผํ•˜๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„  ์ธ์ฆ์ด ํ•„์š”ํ•œ๋ฐ, ์ด๋•Œ ํ† ํฐ์ด ํ•„์š”ํ•˜๋‹ค.
์œ ์ €์˜ ๊ณต๊ฐœ์ ์ธ ์ •๋ณด(ํ”„๋กœํ•„)์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์œ ์ €์˜ ๊ณ ์œ ๋ฒˆํ˜ธ์ธ User ID๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.
ํ† ํฐ์€ HTTP Request์˜ Header์— token์ด๋ž€ ํ•„๋“œ์— ๋“ค์–ด๊ฐ€๋ฉฐ, userId๋Š” URL ์ž์ฒด์— ๊ฒฝ๋กœ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ† ํฐ๊ณผ ์œ ์ €ID๋Š” ๋กœ๊ทธ์•„์›ƒ ์ „๊นŒ์ง€ ํด๋ผ์ด์–ธํŠธ์˜ ์ €์žฅ์†Œ์— ์ž„์‹œ๋กœ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค.

========

POST /user/register - ํšŒ์›๊ฐ€์ž…

์œ ์ €๊ฐ€ Clutch ์„œ๋น„์Šค์— ํšŒ์›๊ฐ€์ž…ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
picture ํ•„๋“œ๋ฅผ ์ฑ„์šธ๋• ๋จผ์ € ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์Šคํ† ์–ด์— ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œ ํ•œ ๋’ค Metadata ID๋ฅผ ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

REQUEST
Name Type Description
email String ์ด๋ฉ”์ผ ์ฃผ์†Œ
pw String ํŒจ์Šค์›Œ๋“œ (MD5 ํ•ด์‹ฑ ํ•„์ˆ˜!)
name String ์œ ์ € ํ”„๋กœํ•„์˜ ์ƒํƒœ ๋ฉ”์„ธ์ง€
status_message String ์œ ์ € ํ”„๋กœํ•„์˜ ์ƒํƒœ ๋ฉ”์„ธ์ง€
picture String ์œ ์ €์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„ (Metadata ID)
gender Number ์„ฑ๋ณ„ (๋‚จ์ž=0, ์—ฌ์ž=1)
RESPONSE
Name Description
userToken ์œ ์ €์˜ ํ† ํฐ. ๊ฐœ์ธ์ •๋ณด ์ ‘๊ทผ์‹œ ์ธ์ฆ์— ์‚ฌ์šฉ๋œ๋‹ค.
userId ์œ ์ €์˜ ๊ณ ์œ ๋ฒˆํ˜ธ. ๊ณต๊ฐœ์ ์ธ ์ •๋ณด ์ ‘๊ทผ์— ์‚ฌ์šฉ๋จ.
STATUS
Code Status Message
200 SUCCESS ์„ฑ๊ณต
1002 REGISTER_ACOUNT_EXISTS ์ด๋ฉ”์ผ ์ค‘๋ณต
SAMPLE DATA

POST /user/register email=test@clutch.com pw=5d41402abc4b2a76b9719d911017c592 // MD5("hello") status_message=Hello picture=(none) gender=0
>>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" }, userId: (User ID), userToken: (user Token) }


========

POST /user/login - ๋กœ๊ทธ์ธ

์œ ์ €๊ฐ€ Clutch ์„œ๋น„์Šค์— ๋กœ๊ทธ์ธํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

REQUEST
Name Type Description
email String ์ด๋ฉ”์ผ ์ฃผ์†Œ
pw String ํŒจ์Šค์›Œ๋“œ (MD5 ํ•ด์‹ฑ ํ•„์ˆ˜!)
RESPONSE
Name Description
userToken ์œ ์ €์˜ ํ† ํฐ. ๊ฐœ์ธ์ •๋ณด ์ ‘๊ทผ์‹œ ์ธ์ฆ์— ์‚ฌ์šฉ๋œ๋‹ค.
userId ์œ ์ €์˜ ๊ณ ์œ ๋ฒˆํ˜ธ. ๊ณต๊ฐœ์ ์ธ ์ •๋ณด ์ ‘๊ทผ์— ์‚ฌ์šฉ๋จ.
STATUS
Code Status Message
200 SUCCESS ์„ฑ๊ณต
1001 LOGIN_FAILED_ACCOUNT_MISMATCH ๊ณ„์ • ๋ถˆ์ผ์น˜
SAMPLE DATA

POST /user/login email=test@clutch.com pw=5d41402abc4b2a76b9719d911017c592 // MD5("hello") >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" }, userId: (User ID), userToken: (user Token) }


========

GET /user/:id - ํ”„๋กœํ•„ ์–ป๊ธฐ

ํ•œ ์œ ์ €์˜ ํ”„๋กœํ•„์„ ์–ป์–ด์˜ฌ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

REQUEST
Name Type Description
id String ์›ํ•˜๋Š” ์œ ์ €์˜ ID
RESPONSE
Name Description
profile ์œ ์ €์˜ ํ”„๋กœํ•„ (JSON ๊ฐ์ฒด)
profile.name ์ด๋ฆ„
profile.status_message ์œ ์ € ํ”„๋กœํ•„์˜ ์ƒํƒœ ๋ฉ”์„ธ์ง€
profile.picture ์œ ์ €์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„ (Metadata ID)
profile.followers_count ํŒ”๋กœ์›Œ๋“ค์˜ ์ˆ˜
profile.followings_count ํŒ”๋กœ์ž‰ํ•˜๋Š” ์ˆ˜
profile.gender ์„ฑ๋ณ„ (๋‚จ์ž=0, ์—ฌ์ž=1)
profile.last_photos ์œ ์ €์˜ ๋Œ€ํ‘œ ์‚ฌ์ง„ 5๊ฐœ (Metadata ID)
SAMPLE DATA

GET /user/52ff32f5ce6c300f55000003 >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" }, profile: { name: "๊น€๋ฃŒ์ค€", status_message: "์•ˆ๋‡ฝ์•ˆ๋‡ฝ~", picture: "(no pic)", followers_count: 3, followings_count: 0, gender: 0, last_photos: [] } }


========

GET /user/:id/picture - ํ”„๋กœํ•„ ์‚ฌ์ง„ ์–ป๊ธฐ

ํ•œ ์œ ์ €์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„์„ ์–ป์–ด์˜ฌ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

REQUEST
Name Type Description
id String ์›ํ•˜๋Š” ์œ ์ €์˜ ID
x Number (์˜ต์…˜) ์›ํ•˜๋Š” ์‚ฌ์ง„์˜ ๊ฐ€๋กœํฌ๊ธฐ
y Number (์˜ต์…˜) ์›ํ•˜๋Š” ์‚ฌ์ง„์˜ ์„ธ๋กœํฌ๊ธฐ
RESPONSE

Content-Type: image/jpeg
Body: (ํ”„๋กœํ•„ ์‚ฌ์ง„)

SAMPLE DATA

GET /user/52ff32f5ce6c300f55000003/picture?x=300&y=300 >>>>>>>>>> Content-Type: image/jpeg Body: (ํ”„๋กœํ•„ ์‚ฌ์ง„)


========

PUT /user/:id/picture - ํ”„๋กœํ•„ ์‚ฌ์ง„ ์—…๋กœ๋“œ

ํ•œ ์œ ์ €์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„์„ ๋ฐ”๊ฟ€ ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

HEADER
Name Description
token ์œ ์ €์˜ ํ† ํฐ
REQUEST
Name Type Description
id String ์›ํ•˜๋Š” ์œ ์ €์˜ ID
picture (multipart) File ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ํŒŒ์ผ
RESPONSE
SAMPLE DATA

PUT /user/52ff32f5ce6c300f55000003/picture >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" }}


========

GET /user/:id/star - ์œ ์ €์˜ ํ’์„  ๊ฐฏ์ˆ˜ ๋ณด๊ธฐ

REQUEST
Name Type Description
id String ์›ํ•˜๋Š” ์œ ์ €์˜ ID
RESPONSE
Name Description
star ํ’์„  ๊ฐฏ์ˆ˜
SAMPLE DATA

GET /user/52ff32f5ce6c300f55000003/star >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" }, stars: 0 }


========

POST /user/:id/star - ์œ ์ €์—๊ฒŒ ํ’์„  ์ถ”๊ฐ€

HEADER
Name Description
token ์œ ์ €์˜ ํ† ํฐ
REQUEST
Name Type Description
id String ์›ํ•˜๋Š” ์œ ์ €์˜ ID
count Number ์ฃผ๊ธฐ๋ฅผ ์›ํ•˜๋Š” ํ’์„  ๊ฐฏ์ˆ˜
SAMPLE DATA

POST /user/52ff32f5ce6c300f55000003/star >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" } }


========

GET /user/:id/followers - ํŒ”๋กœ์–ด ๋ชฉ๋ก ๊ตฌํ•˜๊ธฐ

์œ ์ €์˜ ํŒ”๋กœ์–ด ๋ชฉ๋ก์„ ๊ตฌํ•œ๋‹ค. ๋ฆฌ์ŠคํŠธ ํ˜•์‹์œผ๋กœ Responseํ•œ๋‹ค.

REQUEST
Name Type Description
id String ์›ํ•˜๋Š” ์œ ์ €์˜ ID
pageNo Number ๋ช‡๋ฒˆ์งธ ํŽ˜์ด์ง€์˜ ๊ฒฐ๊ณผ๋ฅผ ์›ํ•˜๋Š”๊ฐ€
pageCount Number ํ•œํŽ˜์ด์ง€์— ๋ช‡๊ฐœ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋„ฃ๋Š”๊ฐ€
RESPONSE
Name Description
followers ํŒ”๋กœ์–ด ๋ฐฐ์—ด
followers.id ํŒ”๋กœ์–ด ID
followers.name ํŒ”๋กœ์–ด ์ด๋ฆ„
followers.status_message ํŒ”๋กœ์–ด ์ƒํƒœ ๋ฉ”์„ธ์ง€
followers.picture ํŒ”๋กœ์–ด ํ”„๋กœํ•„ ์‚ฌ์ง„ ID
followers.followers_count ํŒ”๋กœ์–ด์˜ ํŒ”๋กœ์–ด ๋ช…์ˆ˜
followers.followings_count ํŒ”๋กœ์–ด์˜ ํŒ”๋กœ์ž‰ ๋ช…์ˆ˜
followers.gender ํŒ”๋กœ์–ด์˜ ํŒ”๋กœ์ž‰ ๋ช…์ˆ˜
followers.last_photos[] ํŒ”๋กœ์–ด์˜ ๋Œ€ํ‘œ ์‚ฌ์ง„ 5์žฅ
SAMPLE DATA

GET /user/52ff32f5ce6c300f55000003/followers?pageNo=0&pageCount=50 >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" }, followers: [ { id: 52ff32f5ce6c300f55000014, name: "๊น€์œ ์ €", status_message: "์œ ์ €1์ž…๋‹ˆ๋‹ค. ์•ˆ๋‡ฝ~", picture: (no pic), followers_count: 0, followings_count: 1, gender: 1, last_photos: [a,b,c,d,e] }, { id: 6a6831f4ce6c300f55000025, name: "๋ฐ•์œ ์ €", status_message: "์œ ์ €2์ž…๋‹ˆ๋‹ค. ์•ˆ๋‡ฝ~", picture: (no pic), followers_count: 51, followings_count: 1, gender: 0, last_photos: [b,C,a,D,x] } ] }


========

GET /user/:id/followings - ํŒ”๋กœ์ž‰ ๋ชฉ๋ก ๊ตฌํ•˜๊ธฐ

REQUEST
Name Type Description
id String ์›ํ•˜๋Š” ์œ ์ €์˜ ID
pageNo Number ๋ช‡๋ฒˆ์งธ ํŽ˜์ด์ง€์˜ ๊ฒฐ๊ณผ๋ฅผ ์›ํ•˜๋Š”๊ฐ€
pageCount Number ํ•œํŽ˜์ด์ง€์— ๋ช‡๊ฐœ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋„ฃ๋Š”๊ฐ€
RESPONSE
Name Description
followings ํŒ”๋กœ์ž‰ ๋ฐฐ์—ด
followings.id ํŒ”๋กœ์ž‰์˜ ID
followings.name ํŒ”๋กœ์ž‰ ์ด๋ฆ„
followings.status_message ํŒ”๋กœ์ž‰์˜ ์ƒํƒœ ๋ฉ”์„ธ์ง€
followings.picture ํŒ”๋กœ์ž‰์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„ ID
followings.followers_count ํŒ”๋กœ์ž‰์˜ ํŒ”๋กœ์–ด ๋ช…์ˆ˜
followings.followings_count ํŒ”๋กœ์ž‰์˜ ํŒ”๋กœ์ž‰ ๋ช…์ˆ˜
followings.gender ํŒ”๋กœ์ž‰์˜ ํŒ”๋กœ์ž‰ ๋ช…์ˆ˜
followings.last_photos[] ํŒ”๋กœ์ž‰์˜ ๋Œ€ํ‘œ ์‚ฌ์ง„ 5์žฅ
SAMPLE DATA

GET /user/52ff32f5ce6c300f55000003/followings?pageNo=0&pageCount=50 >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" }, followings: [ { id: 52ff32f5ce6c300f55000014, name: "๊น€์œ ์ €", status_message: "์œ ์ €1์ž…๋‹ˆ๋‹ค. ์•ˆ๋‡ฝ~", picture: (no pic), followers_count: 0, followings_count: 1, gender: 1, last_photos: [a,b,c,d,e] }, { id: 6a6831f4ce6c300f55000025, name: "๋ฐ•์œ ์ €", status_message: "์œ ์ €2์ž…๋‹ˆ๋‹ค. ์•ˆ๋‡ฝ~", picture: (no pic), followers_count: 51, followings_count: 1, gender: 0, last_photos: [b,C,a,D,x] } ] }


========

POST /user/:id/followings - ํŒ”๋กœ์ž‰ํ•˜๊ธฐ

HEADER
Name Description
token ์œ ์ €์˜ ํ† ํฐ
REQUEST
Name Type Description
id String ์œ ์ €์˜ ID
following_id String ํŒ”๋กœ์šฐ๋ฅผ ์›ํ•˜๋Š” ์œ ์ €์˜ ID
SAMPLE DATA

POST /user/52ff32f5ce6c300f55000003/followings >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" } }


========

DELETE /user/:id/followings - ํŒ”๋กœ์ž‰ ํ•ด์ œ

HEADER
Name Description
token ์œ ์ €์˜ ํ† ํฐ
REQUEST
Name Type Description
id String ์œ ์ €์˜ ID
following_id String ํŒ”๋กœ์šฐ ํ•ด์ œ๋ฅผ ์›ํ•˜๋Š” ์œ ์ €์˜ ID
SAMPLE DATA

DELETE /user/52ff32f5ce6c300f55000003/followings >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" } }


========

PATCH /user/:id - ํ”„๋กœํ•„ ์ˆ˜์ •

HEADER
Name Description
token ์œ ์ €์˜ ํ† ํฐ
REQUEST
Name Description
id ์œ ์ €์˜ ID
name ์ด๋ฆ„
status_message ์œ ์ € ํ”„๋กœํ•„์˜ ์ƒํƒœ ๋ฉ”์„ธ์ง€
picture ์œ ์ €์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„ (Metadata ID)
gender ์„ฑ๋ณ„ (๋‚จ์ž=0, ์—ฌ์ž=1)
pw ํŒจ์Šค์›Œ๋“œ (MD5 ํ•ด์‹ฑ ํ•„์ˆ˜!)
SAMPLE DATA

PATCH /user/52ff32f5ce6c300f55000003 name="๊น€๋ฃŒ์ค€" status_message="์ˆ˜์ •๋œ ์ƒํƒœ ๋ฉ”์„ธ์ง€!" pw='24b7059cb0f4df701401ddf854d770ee' // MD5("Halloo") >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" } }


========

DELETE /user/:id - ํšŒ์› ํƒˆํ‡ด

ํšŒ์›์„ ํƒˆํ‡ดํ•˜๊ณ  DB์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์›๋‹ˆ๋‹ค.

HEADER
Name Description
token ์œ ์ €์˜ ํ† ํฐ
SAMPLE DATA

DELETE /user/52ff32f5ce6c300f55000003/followings >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" } }


2. Clutch

NOTE

๋ชจ๋“  ํด๋Ÿฌ์น˜๋Š” ํด๋Ÿฌ์น˜๋ถ์— ์กด์†๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ํด๋Ÿฌ์น˜์˜ ๋ฆฌ์†Œ์Šค๋Š” ํด๋Ÿฌ์น˜๋ถ ์•ˆ์— ์†ํ•ด์žˆ์ง€ ์•Š์œผ๋ฉฐ ๋…์ž์ ์ด๋‹ค. (/clutch) ๋˜ํ•œ, ์ž์‹ ์ด ํด๋Ÿฌ์น˜๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅด๋Š” ๋“ฑ์˜ ๊ธฐํƒ€ ํ–‰๋™๋“ค์€ ๋ชจ๋‘ ์ž์‹ ์˜ ํŒ”๋กœ์›Œ๋“ค์—๊ฒŒ ์•Œ๋ฆผ์ด ์ „๋‹ฌ๋œ๋‹ค. **๋˜ํ•œ ํด๋Ÿฌ์น˜์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ํ™œ๋™๋“ค์€ Header์˜ token์„ ํ†ตํ•œ ์œ ์ € ์ธ์ฆ์ด ํ•„์š”ํ•˜์ง€๋งŒ ๋ฌธ์„œ์—๋Š” ์ „๋ถ€ ์ค‘๋ณต ๊ธฐ์žฌํ•˜์ง€ ์•Š๊ฒ ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ๋ณธ ์š”๊ตฌ์‚ฌํ•ญ์ด๋‹ค. **

POST /clutch - ์ƒˆ๋กœ์šด ํด๋Ÿฌ์น˜ ์“ฐ๊ธฐ

REQUEST
Name Description
tags ํด๋Ÿฌ์น˜์— ๋“ค์–ด๊ฐ€๋Š” ํƒœ๊ทธ๋“ค (์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)
cb_id ์ด ํด๋Ÿฌ์น˜๊ฐ€ ์†ํ•˜๋Š” ํด๋Ÿฌ์น˜๋ถ ID
content_type ์‚ฌ์ง„: 0, ๋™์˜์ƒ: 1, ๋งํฌ: 2
content_pictures (์‚ฌ์ง„์ผ ๊ฒฝ์šฐ) ์‚ฌ์ง„์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ID๋“ค (๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„)
content_link (๋™์˜์ƒ/๋งํฌ์ผ ๊ฒฝ์šฐ) ํ•ด๋‹นํ•˜๋Š” URL
content_body ๊ธ€ ๋‚ด์šฉ
RESPONSE
Name Description
clutchId ์ด ํด๋Ÿฌ์น˜์˜ ID
SAMPLE DATA

POST /clutch cb_id="30501304" tags="์กด์˜ˆ,์—ฌ์‹ ,๊ฑธ์Šค๋ฐ์ด"" content_type=0 content_pictures="pic1id pic2id pic3id" content_body="๋ฏผ์•„ ์กด์˜ˆ..." >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" }, clutchId: fa4230491alf }


========

GET /clutch - ํด๋Ÿฌ์น˜ ๊ฐ€์ ธ์˜ค๊ธฐ (ํƒ€์ž„๋ผ์ธ!)

REQUEST
Name Description
sort ์ •๋ ฌ. (0: ์ธ๊ธฐ์ˆœ, 1: ์ตœ์‹ ์ˆœ)
pageNo ์š”์ฒญํ•˜๋Š” ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ
pageCount ํ•œ ํŽ˜์ด์ง€๋‹น ๋กœ๋”ฉํ•  ํด๋Ÿฌ์น˜ ๊ฐฏ์ˆ˜
RESPONSE
Name Description
clutches ๋กœ๋”ฉ๋œ ํด๋Ÿฌ์น˜ ๋ชฉ๋ก(๋ฆฌ์ŠคํŠธ)
clutches.clutchId ์ด ํด๋Ÿฌ์น˜์˜ ID
clutches.cb_id ํด๋Ÿฌ์น˜๋ถ์˜ ID
clutches.cb_name ํด๋Ÿฌ์น˜๋ถ ์ด๋ฆ„
clutches.userId ํด๋Ÿฌ์น˜๋ฅผ ์˜ฌ๋ฆฐ ์œ ์ €์˜ ID
clutches.userName ํด๋Ÿฌ์น˜๋ฅผ ์˜ฌ๋ฆฐ ์œ ์ €์˜ ์ด๋ฆ„
clutches.userPhoto ํด๋Ÿฌ์น˜๋ฅผ ์˜ฌ๋ฆฐ ์œ ์ €์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„
clutches.content_type ํด๋Ÿฌ์น˜ ์ข…๋ฅ˜
clutches.content_pictures (์˜ต์…˜, ์‚ฌ์ง„๋งŒ) ์‚ฌ์ง„๋“ค (๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„)
clutches.content_link (์˜ต์…˜, ๋™์˜์ƒ ๋ฐ ๋งํฌ๋งŒ) ๋งํฌ URL
clutches.content_link_thumb (์˜ต์…˜, ๋™์˜์ƒ ๋ฐ ๋งํฌ๋งŒ) ๋งํฌ ์ธ๋„ค์ผ ์ด๋ฏธ์ง€
SAMPLE DATA

GET /clutch sort=0 pageNo=0 pageCount=50 >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" }, clutches: [ { clutchId: "fa4230491alf", cb_id: "fa4230491alf", cb_name: "๊ฑธ์Šค๋ฐ์ด", userId: "fa4230491alf", userName: "์‹ ๊ด‘์ˆ˜", userPhoto: "(no pic)", content_type: 0, content_pictures: "pic1id pic2id" }, { clutchId: "fa4230491alf", cb_id: "fa4230491alf", cb_name: "์†Œ๋…€์‹œ๋Œ€", userId: "fa4230491alf", userName: "์ดํ˜ธ์—ฐ" userPhoto: "(no pic)", content_type: 1, content_link: "http://thedeblur.com:1129/videos/1934205" content_link_thumb: "(no pic)" } ] }


========

DELETE /clutch/:clutchId - ํด๋Ÿฌ์น˜๋ฅผ ์ง€์šด๋‹ค.

REQUEST
Name Description
clutchId ์ง€์šฐ๊ณ  ์‹ถ์€ ํด๋Ÿฌ์น˜์˜ ID
RESPONSE
SAMPLE DATA

DELETE /clutch/fa4230491alf >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" } }


========

POST /clutch/:clutchId/like - ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅธ๋‹ค.

REQUEST
Name Description
clutchId ์ข‹์•„ํ•˜๋Š” ํด๋Ÿฌ์น˜์˜ ID
RESPONSE
SAMPLE DATA

POST /clutch/fa4230491alf/like >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" } }


========

DELETE /clutch/:clutchId/like - ์ข‹์•„์š”๋ฅผ ํ•ด์ œํ•œ๋‹ค.

REQUEST
Name Description
clutchId ์ข‹์•„์š”๋ฅผ ํ•ด์ œํ•  ํด๋Ÿฌ์น˜์˜ ID
RESPONSE
SAMPLE DATA

DELETE /clutch/fa4230491alf/unlike >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" } }


========

GET /clutch/:clutchId/comments - ๋Œ“๊ธ€์„ ๊ฐ€์ ธ์˜จ๋‹ค.

REQUEST
Name Description
clutchId ๋Œ“๊ธ€์„ ๊ฐ€์ ธ์˜ฌ ํด๋Ÿฌ์น˜์˜ ID
pageNo ์š”์ฒญํ•˜๋Š” ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ
pageCount ํ•œ ํŽ˜์ด์ง€๋‹น ๋กœ๋”ฉํ•  ๋Œ“๊ธ€ ๊ฐฏ์ˆ˜
RESPONSE
Name Description
comments ๋กœ๋”ฉ๋œ ๋Œ“๊ธ€ ๋ชฉ๋ก
comments.commentId ์ด ํด๋Ÿฌ์น˜์˜ ID
comments.userId ๋Œ“๊ธ€์„ ์“ด ์œ ์ €์˜ ID
comments.userName ๋Œ“๊ธ€์„ ์“ด ์œ ์ €์˜ ์ด๋ฆ„
comments.userPhoto ๋Œ“๊ธ€์„ ์“ด ์œ ์ €์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„
comments.body ๋Œ“๊ธ€ ๋‚ด์šฉ
comments.date ๋Œ“๊ธ€์„ ์“ด ์‹œ๊ฐ„ (Timestamp)
comments.likeCount ๋Œ“๊ธ€์ด ๋ฐ›์€ ์ถ”์ฒœ ๊ฐฏ์ˆ˜
comments.unlikeCount ๋Œ“๊ธ€์ด ๋ฐ›์€ ๋น„์ถ”์ฒœ ๊ฐฏ์ˆ˜
SAMPLE DATA

GET /clutch/fa4230491alf/comments pageNo=0 pageCount=50 >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" }, comments: [ { commentId: "fa4230491alf", userId: "fa4230491alf" userName: "๊น€ํšจ์ค€", userPhoto: "(no pic)", body: "์™€... ์ •๋ง ์˜ˆ์˜๋„ค์š”", likeCount: 0, unlikeCount: 0, date: 1292667739248 }, { commentId: "fa4230491alf", userId: "fa4230491alf", userName: "ํ™๊ธธ๋™", userPhoto: "(no pic)", body: "์ง„์‹ฌ ๋„ˆ๋ฌด ์˜ˆ์˜๋„ค์š”", likeCount: 1, unlikeCount: 0, date: 1392667736248 }] }


========

DELETE /clutch/:clutchId/comments/:commentId - ๋Œ“๊ธ€์„ ์‚ญ์ œํ•œ๋‹ค.

REQUEST
Name Description
clutchId ๋Œ“๊ธ€ ์‚ญ์ œ์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ํด๋Ÿฌ์น˜์˜ ID
commentId ์‚ญ์ œํ•  ๋Œ“๊ธ€์˜ ID
RESPONSE
SAMPLE DATA

DELETE /clutch/fa4230491alf/comments/104059/delete >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" } }


========

POST /clutch/:clutchId/comments/:commentId/like - ๋Œ“๊ธ€์„ ์ถ”์ฒœํ•œ๋‹ค.

DELETE ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ถ”์ฒœ์„ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

REQUEST
Name Description
clutchId ๋Œ“๊ธ€ ์ถ”์ฒœ์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ํด๋Ÿฌ์น˜์˜ ID
commentId ์ถ”์ฒœํ•  ๋Œ“๊ธ€์˜ ID
RESPONSE
STATUS CODE
Code Status Message
2002 ALREADY_UNLIKED ์ด๋ฏธ ๋น„์ถ”์ฒœ์„ ๋ˆ„๋ฅธ ์ƒํƒœ์ž„
SAMPLE DATA

POST /clutch/fa4230491alf/comments/104059/like >>>>>>>>>> { status: { code: 2002, message: "์ด๋ฏธ ๋น„์ถ”์ฒœ์„ ๋ˆ„๋ฅด์…จ์Šต๋‹ˆ๋‹ค." } }


========

POST /clutch/:clutchId/comments/:commentId/unlike - ๋Œ“๊ธ€์„ ๋น„์ถ”์ฒœํ•œ๋‹ค.

DELETE ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋น„์ถ”์ฒœ์„ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

REQUEST
Name Description
clutchId ๋Œ“๊ธ€ ์ถ”์ฒœ์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ํด๋Ÿฌ์น˜์˜ ID
commentId ์ถ”์ฒœํ•  ๋Œ“๊ธ€์˜ ID
RESPONSE
STATUS CODE
Code Status Message
2001 ALREADY_LIKED ์ด๋ฏธ ์ถ”์ฒœ์„ ๋ˆ„๋ฅธ ์ƒํƒœ์ž„
SAMPLE DATA

POST /clutch/fa4230491alf/comments/104059/like >>>>>>>>>> { status: { code: 2001, message: "์ด๋ฏธ ์ถ”์ฒœ์„ ๋ˆ„๋ฅด์…จ์Šต๋‹ˆ๋‹ค." } }



3. Clutch Book

NOTE

๋ชจ๋“  ํด๋Ÿฌ์น˜๋Š” ํด๋Ÿฌ์น˜๋ถ์— ์กด์†๋œ๋‹ค. ํด๋Ÿฌ์น˜๋ถ์˜ ๋ฆฌ์†Œ์Šค๋Š” ์œ ์ € ์•ˆ์— ์†ํ•ด์žˆ๋‹ค. (/user/:userId/cb)
๋˜ํ•œ, ํด๋Ÿฌ์น˜๋ถ์„ ์ง€์นญํ• ๋•Œ๋Š” clutchbook์ด ์•„๋‹Œ cb๋กœ ์ง€์นญํ•œ๋‹ค.

POST /user/:userId/cb - ์ƒˆ๋กœ์šด ํด๋Ÿฌ์น˜๋ถ ์ƒ์„ฑ

REQUEST
Name Description
name ํด๋Ÿฌ์น˜๋ถ ์ด๋ฆ„
desc ํด๋Ÿฌ์น˜๋ถ ์„ค๋ช…
coverPics ํด๋Ÿฌ์น˜๋ถ ์ปค๋ฒ„๋“ค
tags ๋“ค์–ด๊ฐ€๋Š” ํƒœ๊ทธ๋“ค (์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„)
RESPONSE
Name Description
cb_id ์ด ํด๋Ÿฌ์น˜๋ถ์˜ ID
SAMPLE DATA

POST /user/fa4230491alf/cb name="๊ฑธ์Šค๋ฐ์ด" desc="๊ฑธ์Šค๋ฐ์ด ์‚ฌ์ง„ ์ €์žฅํ•˜๋Š” ๊ณณ!" tags="์กด์˜ˆ,์—ฌ์‹ ,๊ฑธ์Šค๋ฐ์ด"" >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" }, cb_id: fa4230491alf }


========

DELETE /user/:userId/cb/:cb_id - ํด๋Ÿฌ์น˜๋ถ ์‚ญ์ œ

REQUEST
Name Description
cb_id ์ง€์šฐ๋ ค๋Š” ํด๋Ÿฌ์น˜๋ถ ID
SAMPLE DATA

DELETE /user/fa4230491alf/cb/aa31347f >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" } }


========

GET /user/:userId/cb/:cb_id - ํด๋Ÿฌ์น˜๋ถ ์•ˆ์— ์žˆ๋Š” ํด๋Ÿฌ์น˜ ๋ชฉ๋ก

REQUEST
Name Description
cb_id ์š”์ฒญํ•˜๋Š” ํด๋Ÿฌ์น˜๋ถ ID
sort ์ •๋ ฌ (0: ์ธ๊ธฐ์ˆœ, 1: ์ตœ์‹ ์ˆœ)
pageNo ์š”์ฒญํ•˜๋Š” ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ
pageCount ํ•œ ํŽ˜์ด์ง€๋‹น ๋กœ๋”ฉํ•  ๋Œ“๊ธ€ ๊ฐฏ์ˆ˜
RESPONSE
Name Description
clutches ๋กœ๋”ฉ๋œ ํด๋Ÿฌ์น˜ ๋ชฉ๋ก(๋ฆฌ์ŠคํŠธ)
clutches.clutchId ์ด ํด๋Ÿฌ์น˜์˜ ID
clutches.cb_id ํด๋Ÿฌ์น˜๋ถ์˜ ID
clutches.cb_name ํด๋Ÿฌ์น˜๋ถ ์ด๋ฆ„
clutches.userId ํด๋Ÿฌ์น˜๋ฅผ ์˜ฌ๋ฆฐ ์œ ์ €์˜ ID
clutches.userName ํด๋Ÿฌ์น˜๋ฅผ ์˜ฌ๋ฆฐ ์œ ์ €์˜ ์ด๋ฆ„
clutches.userPhoto ํด๋Ÿฌ์น˜๋ฅผ ์˜ฌ๋ฆฐ ์œ ์ €์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„
clutches.content_type ํด๋Ÿฌ์น˜ ์ข…๋ฅ˜
clutches.content_pictures (์˜ต์…˜, ์‚ฌ์ง„๋งŒ) ์‚ฌ์ง„๋“ค (๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„)
clutches.content_link (์˜ต์…˜, ๋™์˜์ƒ ๋ฐ ๋งํฌ๋งŒ) ๋งํฌ URL
clutches.content_link_thumb (์˜ต์…˜, ๋™์˜์ƒ ๋ฐ ๋งํฌ๋งŒ) ๋งํฌ ์ธ๋„ค์ผ ์ด๋ฏธ์ง€
SAMPLE DATA

GET /user/fa4230491alf/cb/1853ffba sort=0 pageNo=0 pageCount=50 >>>>>>>>>> { status: { code: 200, message: "์„ฑ๊ณต" }, clutches: [ { clutchId: "fa4230491alf", cb_id: "fa4230491alf", cb_name: "๊ฑธ์Šค๋ฐ์ด", userId: "fa4230491alf", userName: "์‹ ๊ด‘์ˆ˜", userPhoto: "(no pic)", content_type: 0, content_pictures: "pic1id pic2id" }, { clutchId: "fa4230491alf", cb_id: "fa4230491alf", cb_name: "๊ฑธ์Šค๋ฐ์ด", userId: "fa4230491alf", userName: "์ดํ˜ธ์—ฐ" userPhoto: "(no pic)", content_type: 1, content_link: "http://thedeblur.com:1129/videos/1934205" content_link_thumb: "(no pic)" } ] }


========

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment