🌈 [Section2] 10. HTTP / REST API

ν˜„μ£ΌΒ·2022λ…„ 10μ›” 4일
0

bootcamp

λͺ©λ‘ 보기
29/71

πŸ“• 였늘 배운 λ‚΄μš©!

  • REST API
  • Postman μ‹€μŠ΅

✏️ REST API

  • Representational State Transfer API

  • HTTP의 μž₯점을 κ·ΉλŒ€ν™” ν•  수 μžˆλŠ” λ„€νŠΈμ›Œν¬ 아킀텍쳐

  • μ›Ήμ—μ„œ μ‚¬μš©λ˜λŠ” λ°μ΄ν„°λ‚˜ μžμ›(Resource)을 HTTP URI둜 ν‘œν˜„ν•˜κ³ , HTTP ν”„λ‘œν† μ½œμ„ 톡해 μš”μ²­κ³Ό 응닡을 μ •μ˜ν•˜λŠ” 방식
    (URIλ₯Ό μ–΄λ–»κ²Œ μ •μ˜ν• κ±΄μ§€μ— λŒ€ν•œ κ·œμΉ™)
    ➜ 제일 핡심은 λ¦¬μ†ŒμŠ€(URI) 식별

    βœ”οΈ λ¦¬μ†ŒμŠ€ (Resource)
    λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯된 데이터, λ¬Έμ„œ, 이미지, λ™μ˜μƒ λ“± HTTP 톡신을 톡해 μ£Όκ³  받을 수 μžˆλŠ” λͺ¨λ“  것

  • ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ μ‚¬μ΄μ—μ„œ 데이터와 λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•˜κ³  응닡할 λ•Œ λ”°λ₯΄λŠ” κ·œμΉ™
    ( 이 κ·œμΉ™λŒ€λ‘œ μš”μ²­κ³Ό 응닡을 진행해야함 )

[μ°Έκ³ ] https://docs.spring.io/spring-framework/docs/current/javadoc-api/


βœ” REST μ„±μˆ™λ„ λͺ¨λΈ


  • 0단계 : HTTP μ‚¬μš©
    β €
    ➜ λ‹¨μˆœνžˆ HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜λŠ” 단계
    β €
    ➜ 이 APIλ₯Ό REST API라고 ν•  μˆ˜λŠ” μ—†κ³ , κ·Έλƒ₯ κΈ°λ³Έ λ‹¨κ³„μž„

  • 1단계 : κ°œλ³„ λ¦¬μ†ŒμŠ€μ™€μ˜ 톡신을 μ€€μˆ˜
    β €
    ➜ μš”μ²­ν•˜κ³  받은 μžμ›μ— λŒ€ν•œ 정보λ₯Ό μ‘λ‹΅μœΌλ‘œ 전달해야 함
    β €
    ➜ λͺ¨λ“  μžμ›μ€ κ°œλ³„ λ¦¬μ†ŒμŠ€μ— λ§žλŠ” μ—”λ“œν¬μΈνŠΈ(Endpoint)λ₯Ό μ‚¬μš©ν•΄μ•Ό 함
    β €
    Ex. 'μ–΄λ–€ λ¦¬μ†ŒμŠ€λ₯Ό λ³€ν™”μ‹œν‚€λŠ”μ§€' ν˜Ήμ€ 'μ–΄λ–€ 응닡이 μ œκ³΅λ˜λŠ”μ§€'에 따라 λ‹€λ₯Έ μ—”λ“œν¬μΈνŠΈ
    β €
    ➜ μ—”λ“œν¬μΈνŠΈλŠ” λͺ…μ‚¬λ‘œ μž‘μ„±
    β €
    ➜ 응닡할 λ•Œ, μ‚¬μš©ν•œ λ¦¬μ†ŒμŠ€ 정보 + λ¦¬μ†ŒμŠ€ μ‚¬μš©μ— λŒ€ν•œ 성곡/μ‹€νŒ¨ 여뢀도 λ°˜ν™˜ν•΄μ•Ό 함

βœ”οΈ μ—”λ“œν¬μΈνŠΈ μ λŠ” 방법
CamelCase - λͺ¨λ‘ λΆ™μ—¬μ“°κ³  λ‹¨μ–΄μ˜ μ‹œμž‘μ€ λŒ€λ¬Έμžλ‘œ (λ§¨μ•žμ€ λŒ€μ†Œλ¬Έμž 상관 μ—†μŒ)
Snake_case - μ–Έλ”λ°”λ‘œ 단어 μž‡κΈ°
Spinal-case - ν•˜μ΄ν”ˆμœΌλ‘œ 단어 μž‡κΈ° (URI μ“Έ λ•Œ μ‚¬μš© - URIλŠ” λͺ¨λ‘ μ†Œλ¬Έμž)
➜ 보톡 CamelCase μ‚¬μš©ν•˜κ³  λ‚˜λ¨Έμ§€λŠ” 거의 μ•ˆμ”€


  • 2단계 : HTTP λ©”μ„œλ“œ 원칙 μ€€μˆ˜ ➜ CRUD에 λ§žλŠ” μ μ ˆν•œ HTTP λ©”μ„œλ“œλ₯Ό μ‚¬μš© ➜ μ—¬κΈ°κΉŒμ§€ μ μš©ν•˜λ©΄ λŒ€μ²΄μ μœΌλ‘œ 잘 μž‘μ„±λœ API라고 함

    βœ”οΈ CRUD
    λŒ€λΆ€λΆ„μ˜ 컴퓨터 μ†Œν”„νŠΈμ›¨μ–΄κ°€ κ°€μ§€λŠ” 기본적인 데이터 처리 κΈ°λŠ₯인 Create(생성) - POST, Read(읽기) - PUT, Update(κ°±μ‹ ) - PUT, Delete(μ‚­μ œ)λ₯Ό λ¬Άμ–΄μ„œ μΌμ»«λŠ” 말


  • 3단계 : HATEOAS 원칙 μ€€μˆ˜

    ➜ ν•˜μ΄νΌλ―Έλ””μ–΄ μ»¨νŠΈλ‘€μ„ 적용
    ( HATEOAS(Hypertext As The Engine Of Application State)의 μ•½μ–΄ )

    ➜ μš”μ²­μ€ 2단계와 λ™μΌν•˜μ§€λ§Œ, μ‘λ‹΅μ—λŠ” λ¦¬μ†ŒμŠ€(URI)λ₯Ό ν¬ν•¨ν•œ 링크λ₯Ό μ‚½μž…ν•˜μ—¬ μƒˆλ‘œμš΄ κΈ°λŠ₯에 μ ‘κ·Όν•  수 μžˆλ„λ‘ 함
    ( 더 쉽고, 효율적으둜 λ¦¬μ†ŒμŠ€μ™€ κΈ°λŠ₯에 μ ‘κ·Όν•  수 있게 ν•˜λŠ” νŠΈλ¦¬κ±°κ°€ 될 수 있음 )
    β €
    Ex. μ’Œμ„ μ˜ˆμ•½ μ‹œ, μ˜ˆμ•½ κ°€λŠ₯ μ‹œκ°„ 확인 후에 κ·Έ μ‹œκ°„λŒ€μ— μ˜ˆμ•½ν•  수 μžˆλŠ” 링크 μ‚½μž… or μ˜ˆμ•½ μ™„λ£Œ ν›„ κ·Έ μ˜ˆμ•½μ„ λ‹€μ‹œ 확인할 수 μžˆλŠ” 링크 μ‚½μž…

[μ°Έκ³ ] https://cloud.google.com/apis/design?hl=ko
[μ°Έκ³ ] https://sanghaklee.tistory.com/57


βœ” 자주 μ‚¬μš©λ˜λŠ” HTTP λ©”μ„œλ“œ

  • GET
    ➜ νŠΉμ • λ¦¬μ†ŒμŠ€ 쑰회 (Read)
    ( λ°μ΄ν„°μ˜ μˆ˜μ • 없이 데이터λ₯Ό λ°›κΈ°λ§Œ 함 )
    ➜ bodyλ₯Ό 가지지 μ•Šμ•„ query parameter μ‚¬μš©ν•˜μ—¬ λ¦¬μ†ŒμŠ€ 전달
    Ex. μ’Œμ„ 쑰회, κ²€μƒ‰ν•΄μ„œ 자료 보기

  • HEAD
    ➜ GETκ³Ό λ™μΌν•œ μ‘λ‹΅μ΄μ§€λ§Œ, 응닡에 body κ°€ ν¬ν•¨λ˜μ§€ μ•ŠμŒ

  • POST
    ➜ μš”μ²­λ§ˆλ‹€ μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€ 생성 (λ©±λ“±μ„± 가지지 μ•ŠμŒ) (Creat)
    ( 예기치 λͺ»ν•œ input으둜 μ„œλ²„μ˜ μƒνƒœ λ³€ν™”λ‚˜ λΆ€μž‘μš©μ„ μΌμœΌν‚¬ μˆ˜λ„ 있음 )
    ➜ 잘 μƒμ„±λ˜λ©΄ 응닡은 201 created둜 옴
    Ex. μ’Œμ„ μ˜ˆμ•½, νšŒμ› κ°€μž…

  • PUT
    ➜ μš”μ²­λ§ˆλ‹€ 같은 λ¦¬μ†ŒμŠ€ λ°˜ν™˜ (λ©±λ“±μ„± 가짐)
    ➜ λͺ©μ  λ¦¬μ†ŒμŠ€μ˜ λͺ¨λ“  ν˜„μž¬ ν‘œμ‹œλ₯Ό μš”μ²­ν•˜λŠ” κ°’μœΌλ‘œ ꡐ체 (전체 μˆ˜μ •) (Update)

  • DELETE
    ➜ νŠΉμ • λ¦¬μ†ŒμŠ€ μ‚­μ œ
    Ex. νšŒμ› νƒˆν‡΄

  • PATCH
    ➜ λ¦¬μ†ŒμŠ€μ˜ μΌλΆ€λΆ„λ§Œ μˆ˜μ • (Update)
    Ex. λΉ„λ°€λ²ˆν˜Έ μˆ˜μ •

  • OPTIONS
    ➜ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 톡신 μ˜΅μ…˜ μ„€λͺ…

  • TRACE
    ➜ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 경둜λ₯Ό 따라 λ©”μ‹œμ§€ 루프백 ν…ŒμŠ€νŠΈ μˆ˜ν–‰

βœ”οΈ λ©±λ“±μ„± (Idempotent)
➜ 맀 μš”μ²­λ§ˆλ‹€ 같은 λ¦¬μ†ŒμŠ€λ₯Ό λ°˜ν™˜ν•˜λŠ” νŠΉμ§•

Ex.

  • 멀버 등둝 /members ➜ POST
  • 멀버 λͺ©λ‘ 쑰회 /members ➜ GET
  • 멀버 쑰회 /members/{id} ➜ GET
  • 멀버 μˆ˜μ • /members/{id} ➜ PUT/PATCH
  • 멀버 μ‚­μ œ /members/{id} ➜ DELETE

Ex. 총 120개의 νŠΈμœ— 쀑 μΈλ±μŠ€κ°€ 20~30인 νŠΈμœ—, 즉 μ—΄ 개의 νŠΈμœ—λ§Œ κ°€μ Έμ˜¨λ‹€κ³  ν•  λ•Œ,
➜ GET /tweets?offset=20&limit=10 둜 μš”μ²­
➜ 정보 가져와 / νŠΈμœ— 정보 / κ±°κΈ°μ„œ 20λΆ€ν„° 10개
β €
( Query Parameter 쀑 offset(ν˜„μž¬ μœ„μΉ˜), limit(컨텐츠 수)κ°€ κ΄€μŠ΅μ μœΌλ‘œ μ‚¬μš©λ¨ )


βœ” 자주 μ‚¬μš©λ˜λŠ” HTTP μƒνƒœμ½”λ“œ

( 응닡할 λ•Œ λ³΄λ‚΄λŠ” 것 )

  • 200 : OK
    ➜ μ„±κ³΅μ μœΌλ‘œ 응닡을 마침

  • 201 : CREATED
    ➜ μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€κ°€ 생성됨

  • 204 : NO CONTENT
    ➜ λ¦¬μ†ŒμŠ€κ°€ μ„±κ³΅μ €μœΌλ‘œ μ‚­μ œλ˜μ–΄ λ‚΄μš©μ΄ μ—†μŒ

  • 302 : Found
    ➜ λ¦¬λ‹€μ΄λ ‰νŠΈν•  URL을 확인함

  • 304 : NOT MODIFIED
    ➜ μš”μ²­λœ λ¦¬μ†ŒμŠ€λ₯Ό μž¬μ „μ†‘ν•  ν•„μš”κ°€ μ—†μŒ
    ( μš”μ²­ν•œ λ¦¬μ†ŒμŠ€μ˜ λ³€κ²½μ‹œκ°„κ³Ό 크기등이 μ›λž˜ 있던 κ±°λž‘ μ„œλ‘œ κ°™μŒ )

  • 400 : BAD REQUEST
    ➜ μš”μ²­μ΄ 잘λͺ»λ˜μ—ˆκ±°λ‚˜ μ²˜λ¦¬ν•  수 μ—†μŒ

  • 401 : UNATHORIZED
    ➜ μš”μ²­μ—λŠ” μ‚¬μš©μž 인증이 ν•„μš”

  • 403 : FORBIDDEN
    ➜ μ„œλ²„κ°€ μš”μ²­μ„ μ΄ν•΄ν–ˆμ§€λ§Œ κ±°λΆ€ν•˜κ±°λ‚˜ μ•‘μ„ΈμŠ€κ°€ ν—ˆμš©λ˜μ§€ μ•ŠμŒ

  • 404 : Not Found
    ➜ ν΄λΌμ΄μ–ΈνŠΈκ°€ 잘λͺ»λœ νŽ˜μ΄μ§€λ₯Ό μ„œλ²„μ— μš”μ²­ν•˜μ—¬ νŽ˜μ΄μ§€λ₯Ό 찾을 수 μ—†μŒ ( URI 뒀에 λ¦¬μ†ŒμŠ€κ°€ μ—†μŒ )

  • 406 : Not Acceptable
    ➜ ν΄λΌμ΄μ–ΈνŠΈκ°€ 응닡 μ½”λ“œλ₯Ό 받을 수 μ—†μŒ

  • 409 : Conflict
    ➜ μš”μ²­μ΄ ν˜„μž¬ μ„œλ²„μ˜ μƒνƒœμ™€ 좩돌될 λ•Œ

  • 500 : Internal Server Error
    ➜ μ„œλ²„μ—μ„œ μ—λŸ¬κ°€ λ°œμƒν•¨

  • 503 : Service Unavailable
    ➜ ν˜„μž¬ μ„œλ²„κ°€ λ¬Έμ œκ°€ μžˆμ–΄ μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•œ μƒνƒœμž„

  • 1xx - 정보 확인 (거의 μ‚¬μš© X)
  • 2xx - 톡신 성곡
  • 3xx - λ¦¬λ‹€μ΄λ ‰μ…˜ ν•„μš” (좔가적인 μž‘μ—…μ΄ ν•„μš”ν•  λ•Œ)
  • 4xx - ν΄λΌμ΄μ–ΈνŠΈ 였λ₯˜ (ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ 잘λͺ» μš”μ²­μ„ λ³΄λƒˆμ„ 경우)
  • 5xx - μ„œλ²„ 였λ₯˜ (μ„œλ²„κ°€ μ£½μ–΄μžˆμ„ λ•Œ, μ„œλ²„μ—μ„œ 였λ₯˜κ°€ 났을 λ•Œ)

[μ°Έκ³ ] https://developer.mozilla.org/ko/docs/Web/HTTP/Status


✏️ Open API 와 API Key

βœ” Open API

  • λˆ„κ΅¬μ—κ²Œλ‚˜ μ—΄λ €μžˆλŠ” API
    but, κΈ°κ΄€μ΄λ‚˜ APIλ§ˆλ‹€ 정해진 이용 μˆ˜μΉ™μ΄ 있고, κ·Έ 이용 μˆ˜μΉ™μ— 따라 μ œν•œμ‚¬ν•­(가격, μ •λ³΄μ˜ μ œν•œ λ“±)이 μžˆμ„ 수 있음

Ex. 날씨 API - https://openweathermap.org/api

βœ” API Key

  • μ„œλ²„μ˜ 문을 μ—¬λŠ” μ—΄μ‡ 
    ➜ μ„œλ²„μ—μ„œ μš”μ²­μ— 응닡할 λ•Œ ν•„μˆ˜μ μœΌλ‘œ λΉ„μš©μ΄ λ°œμƒν•˜κ²Œ λ˜λŠ”λ°, 이 λ•Œ μ„œλ²„ μž…μž₯μ—μ„œ μ•„λ¬΄λŸ° 쑰건 없이 데이터 μ œκ³΅ν•΄μ€„ 의무 μ—†μŒ ➜ 둜그인으둜 이용자λ₯Ό μ œν•œν•˜μ—¬ API Key의 ν˜•νƒœλ‘œ μ œκ³΅ν•΄μ„œ, 데이터λ₯Ό μš”μ²­ν•  λ•Œ API keyλ₯Ό 같이 μ „λ‹¬ν•΄μ•Όλ§Œ μ›ν•˜λŠ” 응닡을 받을 수 μžˆλ„λ‘ 함

😜 Postman μ‹€μŠ΅

ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ 맀번 μ½”λ“œ μž‘μ„±ν•˜λŠ” 것은 λ„ˆλ¬΄ λ²ˆκ±°λ‘­κΈ°μ— API ν…ŒμŠ€νŠΈ λ„κ΅¬λ‘œ κ°„νŽΈν•˜κ²Œ ν…ŒμŠ€νŠΈν•΄λ³Ό 수 μžˆλ‹€.

μ˜€λŠ˜μ€ μ—¬λŸ¬ API ν…ŒμŠ€νŠΈ 도ꡬ듀 쀑 Postman을 μ‚¬μš©ν•˜μ—¬ λ©”μ„œλ“œλ“€μ„ ν…ŒμŠ€νŠΈ ν•΄λ³΄μ•˜λ‹€ !


POST λ©”μ„œλ“œλ‘œ λ‚΄ κΉƒν—™ 아이디에 메세지λ₯Ό λ‚¨κ²¨λ³΄μ•˜κ³  ⬇️


GET λ©”μ„œλ“œλ‘œ λ‚΄κ°€ postν•œ 메세지λ₯Ό μ‘°νšŒν•΄λ³΄μ•˜λ‹€ ⬇️


POST λ©”μ„œλ“œλ‘œ clear μš”μ²­ν•˜λ©΄ λ‚΄κ°€ 올렸던 메세지듀 μ΄ˆκΈ°ν™”λ„ 됨 ⬇️
But, 이건 일반적으둜 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 경우이고 DELETE μ‚¬μš©ν•¨


그리고 였λ₯Έμͺ½μ— μž‘κ²Œ μƒνƒœμ½”λ“œλ„ 확인 κ°€λŠ₯! ⬇️
( μ‚¬μ§„λ§ˆμ € λ„ˆλ¬΄ μž‘λ„€,,γ…Žγ…Ž )


🌈 λŠλ‚€μ 

μ˜€λŠ˜μ€ μ‰¬μ–΄κ°€λŠ” νƒ€μž„κ°™λ‹€!!
많이 어렡지도 μ•Šκ³  νŽ˜μ–΄μ™€ μ‹€μŠ΅λ„ μ•„μ£Ό 빨리 끝났닀 γ…Žγ…Ž
λ‹€λ₯Έ κ±° λ³΅μŠ΅ν•΄μ•Όκ² λ‹€!!

0개의 λŒ“κΈ€