๐Ÿค” ๊ฒŒ์‹œ๋ฌผ "์ข‹์•„์š”" ์—ฌ๋ถ€๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ• ๊นŒ?

๊น€์„ธ์ค€ยท2021๋…„ 5์›” 16์ผ
19

Thinking Log - ๊นŠ๊ฒŒ ๋๊นŒ์ง€

๋ชฉ๋ก ๋ณด๊ธฐ
2/2

๋ฌธ์ œ ์ƒํ™ฉ

Get Contents ๋ผ๋Š” API๊ฐ€ ์žˆ๋‹ค.

GET /contents

status: 200
{
  id: 24213,
  title: "Content Title",
  content: "Content blar blar",
  author: "SEju",
  createdDatetime: "2021-05-13T17:54:03.152+09:00" 
}

์•„์ง ํฌ๊ฒŒ ์‹ ๊ฒฝ์“ฐ์ด๋Š” ๋ถ€๋ถ„์€ ์—†๋‹ค.
๋ฌธ์ œ๋Š” ๋ช…์„ธ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ๋ฐœ์ƒํ–ˆ๋‹ค.

๊ฒŒ์‹œ๋ฌผ์— "์ข‹์•„์š”" ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์–ด์š”

์‚ฌ์šฉ์ž๋Š” ๊ฒŒ์‹œ๋ฌผ์— "์ข‹์•„์š”" ๋ฅผ ๋ˆ„๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด Get Contents API์—๋Š” ์‚ฌ์šฉ์ž ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฒŒ์‹œ๋ฌผ์— "์ข‹์•„์š”"๋ฅผ ๋ˆŒ๋ €๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฐ’์ด ์žˆ์–ด์•ผํ•œ๋‹ค.
๋ณดํ†ต ํ† ์ด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ํ•ด๊ฒฐํ•œ๋‹ค.

GET /contents

status: 200
{
  ...
  liked: true
}

๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•œ์ง€ ์ฐพ์•„๋ณด์ž๊ณ 
๊ถŒ์œ ๋ฅผ ํ–ˆ๊ณ  ์†์”จ๊ฐ€ ๋ฐ›์•„๋“ค์—ฌ ๊ฐ™์ด ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค.

ํ•ด๊ฒฐ ๊ณผ์ •

๋ฌด์ž‘์ • ๊ฒ€์ƒ‰์„ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค best example์„ ์ฐพ์•„๋ณด๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค.
์š”์ฆ˜์—๋Š” ์ข‹์€ REST API๊ฐ€ ๊ณต๊ฐœ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ฐพ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

๊นƒํ—ˆ๋ธŒ์—์„œ ์ œ๊ณตํ•˜๋Š” Restful OpenAPI๋ฅผ ์‚ดํŽด๋ณด์•˜๋‹ค.
๊นƒํ—ˆ๋ธŒ์—๋Š” ๋ ˆํฌ(Repository)๋ผ๋Š” ๋‹จ์œ„๊ฐ€ ์žˆ๊ณ  ์ด๋ฅผ ์œ ์ €๊ฐ€ star๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์€ ์˜ˆ์‹œ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.
OpenAPI์—์„œ๋Š” ์œ ์ €์™€ ๋ ˆํฌ์˜ ์ •๋ณด๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” API ์— ๊ฐ๊ฐ starred_url๊ณผ stargazers_url์ด ์žˆ์–ด Rest์˜ hateoas๋ฅผ ์ง€ํ‚ค๋ฉด์„œ starํ•œ ๋ ˆํฌ๋‚˜ star ํ•ด์ค€ ์œ ์ €์˜ ์ •๋ณด์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋˜ํ•œ starred_url์ด๋‚˜ stargazers_url์˜ ๋’ค์— ๊ฐ๊ฐ ๋ ˆํฌ๋‚˜ ์œ ์ €์˜ ์‹๋ณ„์ž๋ฅผ ๋†“์œผ๋ฏ€๋กœ์„œ ์œ ์ €๊ฐ€ ํ•ด๋‹น ๋ ˆํฌ์— star๋ฅผ ํ–ˆ๋Š”์ง€, ๋ ˆํฌ์— ํ•ด๋‹น ์œ ์ €๊ฐ€ star๋ฅผ ํ•ด์คฌ๋Š”์ง€ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋Š” API๊ฐ€ ์กด์žฌํ–ˆ๋‹ค.

๊ฒฐ๋ก 

Get Codes API ์— starred_url ์†์„ฑ๊ฐ’์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

GET /contents

status: 200
{
 ...
 liked_url: {base_url}/codes/{snippet_id}/star/{user_id}
}

GET ์š”์ฒญ์„ ํ†ตํ•ด star ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • 204 โ†’ ํ•ด๋‹น ์œ ์ €๊ฐ€ star ํ•˜๊ณ  ์žˆ์Œ
  • 404 โ†’ ํ•ด๋‹น ์œ ์ €๊ฐ€ star ํ•˜๊ณ  ์žˆ์ง€ ์•Š์Œ

ํšŒ๊ณ 

์•„๋ฌด๋ž˜๋„ ์—ฌ๋Ÿฌ๋ฒˆ API๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ  ํ”„๋ก ํŠธ ๋กœ์ง์ด ๋” ๋ณต์žกํ•ด์ง€๊ธฐ๋„ ํ–ˆ๋‹ค.
ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ ๊ฐ™์€ ์žฅ์ ์€ ์•„์ง ์ฒด๊ฐ์€ ๋ชปํ•˜๊ณ  ์žˆ๋‹ค.
์ข€ ๋” ๊ณต๋ถ€ํ•ด๋ณด๊ณ  ์ถ”๊ฐ€๋กœ ํฌ์ŠคํŒ…์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๋‹ค.

์—ฌ๊ธฐ์— ๊ฐ™์ด ๊ณ ๋ฏผํ•ด์ค€ ์†์”จ๊ฐ€ ๋” ์ž˜ ์ •๋ฆฌํ•ด์คฌ๋‹ค.

3๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2021๋…„ 5์›” 21์ผ

์˜ค.. RESTfulํ•˜๋ ค๋ฉด ์—ญ์‹œ HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์ž˜ ํ™œ์šฉํ•ด์•ผ ํ•˜๋Š”๊ตฐ์š”

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ
comment-user-thumbnail
2021๋…„ 5์›” 28์ผ

์žฌ๋ฐŒ๋Š” ์ฃผ์ œ๋กœ ์ข‹์€ ๊ธ€์ด ์žˆ์–ด์„œ ๋ณด๋‹ˆ ํ›„๋ฐฐ๋‹˜์ด์…จ๋„ค์š”. ใ…‹ใ…‹ ํ•™๊ต DB ์‹œ๊ฐ„์— ๋ฐฐ์šฐ๋Š” ๊ฒƒ๋“ค์ด ์˜๋ฏธ์—†๊ณ  ๋”ฐ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ค ๋•Œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ๊ทธ ๋•Œ ๋ฐฐ์› ๋˜ relation ๊ฐœ๋…์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ API ๊ฐœ๋ฐœ์—์„  ๊ฝค ์žˆ์—ˆ๋„ค์š”.
+ ๋ณธ๋ฌธ์—์„œ REST ์–˜๊ธฐ๊ฐ€ ๋‚˜์™€์„œ ๋ง์ธ๋ฐ, ์‚ฌ๋‚ด ๋ฐœํ‘œ์—์„œ RESTful์— ๋Œ€ํ•ด ์–˜๊ธฐํ–ˆ๋˜ ๋‚ด์šฉ์„ ๊ธ€๋กœ ์˜ฎ๊ธฐ๊ฒŒ ๋˜๋ฉด ์ฝ”๋ฉ˜ํŠธ ๋“œ๋ฆด๊ฒŒ์š”. API๊ฐ€ JSON ๋ฐ์ดํ„ฐ๋ฅผ responseํ•˜๊ฒŒ ๋˜๋ฉด self-descriptive๋ฅผ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•ด์„œ REST์˜ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜์ง€ ๋ชปํ•  ๋•Œ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด๊ฑฐ๋“ ์š”.

1๊ฐœ์˜ ๋‹ต๊ธ€