๐Ÿช kakaotech campus

์นดํ…Œ์ผ | [STEP2 clone coding] 2์ฃผ์ฐจ ๊ณผ์ œ - (1)

c0zi 2023. 7. 4. 17:00

๊ณผ์ œ๋ช…

1. ์ „์ฒด API ์ฃผ์†Œ ์„ค๊ณ„
2. Mock API Controller ๊ตฌํ˜„
 

๊ณผ์ œ ์„ค๋ช…

1. API์ฃผ์†Œ๋ฅผ ์„ค๊ณ„ํ•˜์—ฌ README์— ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
2. ๊ฐ€์งœ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค๊ณ„ํ•˜์—ฌ ์‘๋‹ตํ•˜๋Š” ์Šคํ”„๋ง๋ถ€ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์—…๋กœ๋“œํ•˜์‹œ์˜ค.

 

๊ณผ์ œ ์ƒ์„ธ : ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ, ์œ ๋…ํ•ด์•ผํ•  ๊ฒƒ

  • ์ „์ฒด API ์ฃผ์†Œ ์„ค๊ณ„๊ฐ€ RestAPI ๋งž๊ฒŒ ์„ค๊ณ„๋˜์—ˆ๋Š”๊ฐ€? (์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฐํฌ๋œ ์„œ๋ฒ„๋Š” POST์™€ GET์œผ๋กœ๋งŒ ๊ตฌํ˜„๋˜์—ˆ๋Š”๋ฐ, ํ•™์ƒ๋“ค์€ PUT๊ณผ DELETE๋„ ๋ฐฐ์šธ ์˜ˆ์ •์ด๋ผ ์ด๋ถ€๋ถ„์ด ๋ฐ˜์˜๋˜์—ˆ๊ณ , ์ฃผ์†Œ๊ฐ€ RestAPI์— ๋งž๊ฒŒ ์„ค๊ณ„๋˜์—ˆ๋Š”์ง€)
  • ๊ฐ€์งœ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค๊ณ„ํ•˜์—ฌ Mock API๋ฅผ ์ž˜ ๊ตฌํ˜„ํ•˜์˜€๋Š”๊ฐ€? (์˜ˆ๋ฅผ ๋“ค์–ด DB์—ฐ๊ฒฐ์—†์ด ์ปจํŠธ๋กค๋Ÿฌ๋งŒ ๋งŒ๋“ค์–ด์„œ ๋ฐฐํฌ๋œ ์„œ๋ฒ„์˜ ์‘๋‹ต๊ณผ ๋™์ผํ•œ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์‘๋‹ต๋˜๋Š”์ง€ ์—ฌ๋ถ€)

 


1. ์ „์ฒด API ์ฃผ์†Œ ์„ค๊ณ„


01) API ์ฃผ์†Œ๋ฅผ ์„ค๊ณ„ํ•˜์—ฌ README์— ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค

์œ ์˜ ์‚ฌํ•ญ : ์ฃผ์†Œ๊ฐ€ RestAPI์— ๋งž๊ฒŒ ์„ค๊ณ„ํ•  ๊ฒƒ

 

๐Ÿ“Œ Restful API ์„ค๊ณ„ ์˜ˆ์‹œ

 

1. URI๋Š” ๋™์‚ฌ๋ณด๋‹ค๋Š” ๋ช…์‚ฌ๋ฅผ, ๋Œ€๋ฌธ์ž๋ณด๋‹ค๋Š” ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

Bad Example http://khj93.com/Running/
Good Example  http://khj93.com/run/  

 

2. ๋งˆ์ง€๋ง‰์— ์Šฌ๋ž˜์‹œ (/)๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

Bad Example http://khj93.com/test/  
Good Example  http://khj93.com/test

 

3. ์–ธ๋”๋ฐ” ๋Œ€์‹  ํ•˜์ดํฐ์„ ์‚ฌ์šฉํ•œ๋‹ค.

Bad Example http://khj93.com/test_blog
Good Example  http://khj93.com/test-blog  

 

4. ํŒŒ์ผํ™•์žฅ์ž๋Š” URI์— ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

Bad Example http://khj93.com/photo.jpg  
Good Example  http://khj93.com/photo  

 

5. ํ–‰์œ„๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

Bad Example http://khj93.com/delete-post/1  
Good Example  http://khj93.com/post/1  

 

[์ฐธ๊ณ  : https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80]

 

(์ถ”ํ›„ Rest API์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด ์˜ฌ๋ ค์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค. ๋ชจ๋ฅด๋Š” ๊ฒŒ ๋„ˆ๋ฌด ๋งŽ๋‹ค ....)


1. User

1. ๋กœ๊ทธ์ธ / ๋กœ๊ทธ์•„์›ƒ
  • POST
  • http://localhost:8080/login
  • Request Body ⇒ { "email":"ssar@nate.com", "password":"meta1234!" }

 

2. ํšŒ์›๊ฐ€์ž… - ์ด๋ฉ”์ผ ์ค‘๋ณต์ฒดํฌ
  • POST
  • http://localhost:8080/duplicate-check
  • Request Body ⇒ { "email":"ssarnate.com" }
check > duplicate-check๋กœ ๋ณ€๊ฒฝํ•˜์˜€๋Š”๋ฐ, ์ด ๋•Œ์˜ check๋Š” 'ํ–‰์œ„'์ธ ๊ฒƒ ๊ฐ™์€๋ฐ ์‚ฌ์šฉํ•ด๋„ ๊ดœ์ฐฎ์€ ๊ฒƒ์ผ๊นŒ ?

 

3. ํšŒ์›๊ฐ€์ž…
  • POST
  • http://localhost:8080/join
  • Request Body ⇒ { "username":"mata", "email":"meta@nate.com", "password":"meta1234!" }

 

* login๊ณผ join์˜ ๊ฒฝ์šฐ ๊ด€์Šต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์–ด์ด๊ณ  Restful API์— ์™„๋ฒฝํžˆ ๋ถ€ํ•ฉํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, 
์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ(๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋Œ€์ฒด, ๊ด€๋ จ์„ฑ ๊ฐ์†Œ)๋ณด๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ(์ดํ•ด๊ฐ€ ์‰ฌ์›€)์˜ ์ด๋“์ด ๋” ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •ํ•˜์ง€ ์•Š์•˜๋‹ค.

 

2. Product

 

1. ์ „์ฒด ์ƒํ’ˆ ๋ชฉ๋ก ์กฐํšŒ
  • GET
  • http://localhost:8080/products

 

2. ๊ฐœ๋ณ„ ์ƒํ’ˆ ์ƒ์„ธ ์กฐํšŒ
  • GET
  • http://localhost:8080/products/id
์ด๋•Œ์˜ id๋Š” Product table์˜ PK id๋ฅผ ๋œปํ•œ๋‹ค.

 

3. Cart

 

1. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์กฐํšŒ
  • GET
  • http://localhost:8080/carts
  • Request Header
  • ⇒ Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJzc2FyQG5hdGUuY29tIiwicm9sZSI6Il JPTEVfVVNFUiIsImlkIjoxLCJleHAiOjE2ODcwNTM5MzV9.fXlD0NZQXYYfPHV8rokRJTM86nhS869L Z1KIGi7_qvPOcVbXgvyZLKvnlLxomIiS3YFnQRLzXAJ2G41yI_AmGg

 

2. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ
  • POST
  • http://localhost:8080/carts
  • Request Header
  • ⇒ Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJzc2FyQG5hdGUuY29tIiwicm9sZSI6Il JPTEVfVVNFUiIsImlkIjoxLCJleHAiOjE2ODcwNTM5MzV9.fXlD0NZQXYYfPHV8rokRJTM86nhS869L Z1KIGi7_qvPOcVbXgvyZLKvnlLxomIiS3YFnQRLzXAJ2G41yI_AmGg
  • Request Body ⇒ [ { "optionId":1, "quantity":5 }, { "optionId":2, "quantity":5 } ]
 carts/add x : (์„ค๊ณ„์›์น™ 5) ํ–‰์œ„๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

3. ์ฃผ๋ฌธํ•˜๊ธฐ - ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ˆ˜์ •
  • PUT
  • http://localhost:8080/carts 
  • Request Header ⇒ Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJzc2FyQG5hdGUuY29tIiwicm9sZSI6Il JPTEVfVVNFUiIsImlkIjoxLCJleHAiOjE2ODcwNTM5MzV9.fXlD0NZQXYYfPHV8rokRJTM86nhS869L Z1KIGi7_qvPOcVbXgvyZLKvnlLxomIiS3YFnQRLzXAJ2G41yI_AmGg
  • Request Body ⇒ [ { "cartId":4, "quantity":10 }, { "cartId":5, "quantity":10 } ]
POST > PUT : ์ˆ˜์ •์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด๋ฏ€๋กœ, PUT ์‚ฌ์šฉ
update x : (์„ค๊ณ„์›์น™ 5) ํ–‰์œ„๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

4. Order

 

1. ์ฃผ๋ฌธ insert
  • POST
  • http://localhost:8080/orders
  • Request Header ⇒ Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJzc2FyQG5hdGUuY29tIiwicm9sZSI6Il JPTEVfVVNFUiIsImlkIjoxLCJleHAiOjE2ODcwNTM5MzV9.fXlD0NZQXYYfPHV8rokRJTM86nhS869L Z1KIGi7_qvPOcVbXgvyZLKvnlLxomIiS3YFnQRLzXAJ2G41yI_AmGg
save x : (์„ค๊ณ„์›์น™ 5) ํ–‰์œ„๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

2. ์ฃผ๋ฌธ ์™„๋ฃŒ
  • GET
  • http://localhost:8080/orders/id
  • Request Header ⇒ Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJzc2FyQG5hdGUuY29tIiwicm9sZSI6Il JPTEVfVVNFUiIsImlkIjoxLCJleHAiOjE2ODcwNTM5MzV9.fXlD0NZQXYYfPHV8rokRJTM86nhS869L Z1KIGi7_qvPOcVbXgvyZLKvnlLxomIiS3YFnQRLzXAJ2G41yI_AmGg