๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/ํ”„๋กœ์ ํŠธ

[๋ฐ๋ธŒ์ฝ”์Šค] BOOK STORE ํ”„๋กœ์ ํŠธ API ์„ค๊ณ„(1)

ํ‚ํ‚์ž‰ 2025. 5. 8. 23:51

์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ง„์งœ ํ”„๋กœ์ ํŠธ๋ผ๊ณ  ํ• ๋งŒํ•œ๊ฑธ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์•„์ง ํ”„๋ก ํŠธ ์ปค๋ฆฌํ˜๋Ÿผ์€ ์‹œ์ž‘์„ ์•ˆํ•ด์„œ API๋งŒ ์šฐ์„  ๋งŒ๋“œ๋Š” ๋“ฏ? ํ”„๋ก ํŠธ ์—†๋Š” ํ”„๋กœ์ ํŠธ๋ผ๋‹ˆ ๋„ˆ๋ฌด ์–ด์ƒ‰ํ•˜๊ณ  ์–ด์ƒ‰ํ•จ. ์˜ค๋Š˜์€ API ์„ค๊ณ„๋ฅผ ํ•ด๋ณด์•˜๋‹ค.


ํšŒ์› API

ํšŒ์›๊ฐ€์ž…
Method POST
URL /join
HTTP status code ์„ฑ๊ณต: 201
์‹คํŒจ: 400
Request Body {
     email: "user_email",
     password: "user_password"
}
Response Body  
๋กœ๊ทธ์ธ
Method POST
URL /login
HTTP status code ์„ฑ๊ณต: 200
์‹คํŒจ: 400(์ž˜๋ชป๋œ ์š”์ฒญ)
         401(๊ถŒํ•œ x)
Request Body {
     email: "user_email",
     password: "user_password"
}    
Response Body JWT Token
๋น„๋ฐ€๋ฒˆํ˜ธ ์ดˆ๊ธฐํ™” ์š”์ฒญ
Method POST
URL /user
HTTP status code ์„ฑ๊ณต: 200
์‹คํŒจ: 400(์ž˜๋ชป๋œ ์š”์ฒญ)
         401(๊ถŒํ•œ x)
Request Body {
    email: "user_email"
}
Response Body JWT Token
๋น„๋ฐ€๋ฒˆํ˜ธ ์ดˆ๊ธฐํ™”
Method PUT
URL /user
HTTP status code ์„ฑ๊ณต: 200
์‹คํŒจ: 400
Request Body {
   password: "user_password"
}
Response Body  
ํšŒ์› ์‚ญ์ œ
Method DELETE
URL /user/{user_id}
HTTP status code ์„ฑ๊ณต: 200
์‹คํŒจ: 400
Request Body  
Response Body  

 

๋„์„œ API

์ „์ฒด ๋„์„œ ์กฐํšŒ
Method GET
URL /books
HTTP status code ์„ฑ๊ณต 200
Request Body  
Response Body [
   {
        title: "๋„์„œ ์ œ๋ชฉ",
        summary: "์š”์•ฝ ์„ค๋ช…",
        author: "๋„์„œ ์ž‘๊ฐ€",
        price: "๊ฐ€๊ฒฉ",
        likes: "์ข‹์•„์š” ์ˆ˜",
        pubDate: "์ถœ๊ฐ„ ๋‚ ์งœ"
   }
   {
        title: "๋„์„œ ์ œ๋ชฉ",
        summary: "์š”์•ฝ ์„ค๋ช…",
        author: "๋„์„œ ์ž‘๊ฐ€",
        price: "๊ฐ€๊ฒฉ",
        likes: "์ข‹์•„์š” ์ˆ˜",
        pubDate: "์ถœ๊ฐ„ ๋‚ ์งœ"
   }
]

๊ฐœ๋ณ„ ๋„์„œ ์กฐํšŒ
Method GET
URL /books/{id}
HTTP status code ์„ฑ๊ณต: 200
Request Body  
Response Body [
   {
       id: "๋„์„œ id",
       title: "๋„์„œ ์ œ๋ชฉ",
       category: "์นดํ…Œ๊ณ ๋ฆฌ",
       format: "ํฌ๋งท",
       isbn: "isbn",
       summary: "์š”์•ฝ ์„ค๋ช…",
       author: "๋„์„œ ์ž‘๊ฐ€",
       pages: "์ชฝ์ˆ˜",
       description: "์ƒ์„ธ ์„ค๋ช…",
       index : "๋ชฉ์ฐจ",
       price: "๊ฐ€๊ฒฉ",
       likes: "์ข‹์•„์š” ์ˆ˜",
       liked: boolean,
       pubDate: "์ถœ๊ฐ„ ๋‚ ์งœ"
   }
]
์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋„์„œ ๋ชฉ๋ก ์กฐํšŒ
Method GET
URL /books?categoryId={categoryId}&new={boolean}
HTTP status code ์„ฑ๊ณต: 200
Request Body  
Response Body [
   {
        title: "๋„์„œ ์ œ๋ชฉ",
        summary: "์š”์•ฝ ์„ค๋ช…",
        author: "๋„์„œ ์ž‘๊ฐ€",
        price: "๊ฐ€๊ฒฉ",
        likes: "์ข‹์•„์š” ์ˆ˜",
        pubDate: "์ถœ๊ฐ„ ๋‚ ์งœ"
   }
]

 

 

์ข‹์•„์š” API

์ข‹์•„์š” ์ถ”๊ฐ€
Method PUT
URL /likes/{bookId}
HTTP status code ์„ฑ๊ณต: 200
์‹คํŒจ: 404
Request Body  
Response Body  
์ข‹์•„์š” ์ทจ์†Œ
Method PUT
URL /likes/{bookId}
HTTP status code ์„ฑ๊ณต: 200
์‹คํŒจ: 404
Request Body  
Response Body  

 

 

์žฅ๋ฐ”๊ตฌ๋‹ˆ API

์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ
Method POST
URL /cart
HTTP status code ์„ฑ๊ณต: 201
์‹คํŒจ: 404
Request Body {
    bookId: ๋„์„œ Id,
    count: ์ˆ˜
}
Response Body  
์žฅ๋ฐ”๊ตฌ๋‹ˆ ์กฐํšŒ
Method GET
URL /cart
HTTP status code ์„ฑ๊ณต: 200
Request Body  
Response Body [
   {
        bookId: ๋„์„œ id,
        title: "๋„์„œ ์ œ๋ชฉ",
        summary: "๋„์„œ ์š”์•ฝ",
        count: ์ˆ˜๋Ÿ‰,
        price: ๊ฐ€๊ฒฉ

   }
   {
        bookId: ๋„์„œ id,
        title: "๋„์„œ ์ œ๋ชฉ",
        summary: "๋„์„œ ์š”์•ฝ",
        count: ์ˆ˜๋Ÿ‰,
        price: ๊ฐ€๊ฒฉ

   }
]
์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋„์„œ ์‚ญ์ œ
Method DELETE
URL /cart/{bookId}
HTTP status code ์„ฑ๊ณต: 200
์‹คํŒจ: 404
Request Body  
Response Body  

 

 

์ฃผ๋ฌธ API

์ฃผ๋ฌธ ๋“ฑ๋ก
Method POST
URL /order
HTTP status code ์„ฑ๊ณต: 201
์‹คํŒจ: 404
Request Body {
     orderId: "์žฅ๋ฐ”๊ตฌ๋‹ˆ id"
}
Response Body  
์žฅ๋ฐ”๊ตฌ๋‹ˆ์—์„œ ์„ ํƒํ•œ ์ฃผ๋ฌธ ์ƒํ’ˆ ๋ชฉ๋ก ์กฐํšŒ
Method GET
URL /order/{userId}
HTTP status code ์„ฑ๊ณต: 200
์‹คํŒจ: 404
Request Body  
Response Body [
   {
        cartItemId: ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋„์„œ id,
        bookId: ๋„์„œ id,
        title: "๋„์„œ ์ œ๋ชฉ",
        summary: "๋„์„œ ์š”์•ฝ",
        count: ์ˆ˜๋Ÿ‰,
        price: ๊ฐ€๊ฒฉ

   }
   {
        cartItemId: ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋„์„œ id,
        bookId: ๋„์„œ id,
        title: "๋„์„œ ์ œ๋ชฉ",
        summary: "๋„์„œ ์š”์•ฝ",
        count: ์ˆ˜๋Ÿ‰,
        price: ๊ฐ€๊ฒฉ

   }
]

 


์ฃผ์ œ๊ฐ€ ์ฉ ๋งˆ์Œ์— ๋“ค์ง€๋Š” ์•Š๋Š”๋‹ค. ๋„์„œ ์‡ผํ•‘๋ชฐ์ธ ๊ฒƒ ๊ฐ™์€๋ฐ, ๊ฒฐ์ œ API๋ฅผ ๋ถ™์ผ ๊ฒŒ ์•„๋‹Œ๋ฐ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ฃผ๋ฌธ์„œ ํ™•์ธ ๊ธฐ๋Šฅ๊นŒ์ง€ ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋‚˜ ์‹ถ๋‹ค๊ฐ€๋„ ํ•™์Šต์ด ์šฐ์„ ์ด๋‹ˆ CRUD ์ˆ™๋‹ฌ์„ ์œ„ํ•ด์„œ๋ผ๋„ ๋ญ๋“  ๊ธฐ๋Šฅ ํ•˜๋‚˜ ๋” ์žˆ์œผ๋ฉด ์ข‹์€ ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜๊ณ . ์‚ฌ์‹ค ๊ทธ๋ƒฅ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ์ธ๊ฒŒ ๋ง˜์— ์•ˆ๋“ค์–ด์„œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ๋„ ๋งˆ์Œ์— ์•ˆ๋“œ๋Š” ๊ฒƒ ๊ฐ™์Œ. ๋‚˜๋งŒ์˜ ์„œ์žฌ ๋А๋‚Œ์œผ๋กœ ํ•ด๋ณด๊ณ  ์‹ถ์€๋ฐ ๋ง˜๋Œ€๋กœ ํ•˜๋ฉด ์•ˆ๋˜๊ฒ ์ง• ๋๋‚˜๊ณ  ๋ฆฌํŒฉํ† ๋ง ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

์šฐ์„  ๊ฐ•์˜์— ๋”ฐ๋ผ ์„ค๊ณ„๋ฅผ ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ, API ์„ค๊ณ„๋ฅผ ๋” ์„ธ๋ถ„ํ™” ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.