TIL. 49 RESTful API ?

Minjae ChoiΒ·2021λ…„ 11μ›” 9일
0

Computer Science

λͺ©λ‘ 보기
2/2

πŸ“„ REST κ°œλ… 정리

  • "Restfulν•œ 섀계". 무슨 뜻일까?

  • RESTλŠ” μ•„ν‚€ν…μ²˜ 원칙 μ„ΈνŠΈμ΄λ‹€. μš”μ²­μ΄ μˆ˜ν–‰λ  λ•Œ, REST APIλŠ” λ¦¬μ†ŒμŠ€ μƒνƒœμ— λŒ€ν•œ ν‘œν˜„μ„ μš”μ²­μžμ—κ²Œ μ „μ†‘ν•œλ‹€.

  • HTTP URIλ₯Ό 톡해 μžμ›(Resource)을 λͺ…μ‹œν•˜κ³ , HTTP Method인 POST GET PUT DELETEλ₯Ό 톡해 ν•΄λ‹Ή μžμ›μ— λŒ€ν•œ CRUD μž‘μ—…μ„ μ μš©ν•œλ‹€.

    • POST Create(μš”μ²­ν•˜λ©΄ μžμ›μ„ 생성)
    • GET Read(μžμ›μ„ 쑰회)
    • PUT Update(μžμ›μ„ μˆ˜μ •)
    • DELETE Delete(μžμ›μ„ μ‚­μ œ)
  • RESTλŠ” μžμ› 기반으둜 μ„€κ³„λ˜λ©° HTTP Methodλ₯Ό 톡해 μžμ›μ„ μ²˜λ¦¬ν•˜λŠ” μ•„ν‚€ν…μ²˜λ₯Ό μ˜λ―Έν•œλ‹€κ³  λ³Ό 수 μžˆλ‹€.

  • RESTful 일반적으둜 RESTλΌλŠ” μ•„ν‚€ν…μ²˜λ₯Ό κ΅¬ν˜„ν•˜λŠ” μ›Ή μ„œλΉ„μŠ€λ₯Ό λ‚˜νƒ€λ‚΄λ©° νŠΉμ • κΈ°μˆ μ„ μ •μ˜ν•˜λŠ” 것이 μ•„λ‹ˆλ‹€. REST APIλ₯Ό μ œκ³΅ν•˜λŠ” μ›Ή μ„œλΉ„μŠ€λ₯Ό RESTfulν•˜λ‹€κ³  ν•  수 μžˆλ‹€.


RESTλ₯Ό λ”°λ₯΄λŠ” 이유?

  • REST APIλŠ” μ‰½κ²Œ μ„Έκ°€μ§€λ‘œ ꡬ뢄할 수 μžˆλ‹€.

    • μžμ›(Resource) URI
    • ν–‰μœ„(Verb) HTTP Method
    • ν‘œν˜„(Representations)
  • HTTP ν‘œμ€€ ν”„λ‘œν† μ½œμ— λ”°λ₯΄λŠ” λͺ¨λ“  ν”Œλž«νΌμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

  • μžμ›μ˜ ν‘œν˜„λΏλ§Œ μ•„λ‹ˆλΌ κ·Έ ν–‰μœ„(HTTP Method)와 ν•΄λ‹Ή μžμ›μ˜ 응닡 μƒνƒœμ½”λ“œκ°€ 상황을 λͺ…ν™•ν•˜κ²Œ λ‚˜νƒ€λ‚΄λ―€λ‘œ μ˜λ„ν•˜λŠ” λ°”λ₯Ό μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆλ‹€.

  • Client-Server ꡬ쑰 μ„œλ²„λŠ” API 제곡, ν΄λΌμ΄μ–ΈνŠΈλŠ” μ‚¬μš©μž μΈμ¦μ΄λ‚˜ μ½˜ν…μŠ€νŠΈ(μ„Έμ…˜, 둜그인 정보) 등을 직접 κ΄€λ¦¬ν•˜λŠ” ꡬ쑰둜 각각의 역할이 ν™•μ‹€νžˆ κ΅¬λΆ„λ˜κΈ° λ•Œλ¬Έμ— μ„œλ‘œκ°„μ˜ κ°œλ°œν•΄μ•Ό ν•  λ‚΄μš©μ΄ λͺ…확해지고 μ˜μ‘΄μ„±μ΄ 쀄어든닀.

  • Uniform Interface(μœ λ‹ˆνΌ μΈν„°νŽ˜μ΄μŠ€) URI둜 μ§€μ •ν•œ μžμ›μ— λŒ€ν•œ μ‘°μž‘μ„ ν†΅μΌλ˜κ³  ν•œμ •μ μΈ μΈν„°νŽ˜μ΄μŠ€λ‘œ μˆ˜ν–‰ν•˜λŠ” μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌμ„ λ§ν•œλ‹€.

  • Stateless(λ¬΄μƒνƒœμ„±) RESTλŠ” λ¬΄μƒνƒœμ„± 성격을 κ°–λŠ”λ‹€. μ„Έμ…˜ μ •λ³΄λ‚˜ μΏ ν‚€ 정보λ₯Ό λ³„λ„λ‘œ μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— API μ„œλ²„λŠ” μš”μ²­λ§Œ λ‹¨μˆœ μ²˜λ¦¬ν•˜λ©΄ λœλ‹€. 이둜 인해 μ„œλΉ„μŠ€ μžμœ λ„κ°€ 높아지고 μ„œλ²„μ—μ„œ λΆˆν•„μš”ν•œ 정보λ₯Ό κ΄€λ¦¬ν•˜μ§€ μ•ŠμœΌλ―€λ‘œμ¨ κ΅¬ν˜„μ΄ λ‹¨μˆœν•΄μ§„λ‹€.

  • Cacheable(μΊμ‹œ) κ°€μž₯ 큰 νŠΉμ§• 쀑 ν•˜λ‚˜λŠ” HTTPλΌλŠ” κΈ°μ‘΄ μ›Ήν‘œμ€€μ„ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ—, μ›Ήμ—μ„œ μ‚¬μš©ν•˜λŠ” κΈ°μ‘΄ 인프라λ₯Ό κ·ΈλŒ€λ‘œ ν™œμš©ν•  수 μžˆλ‹€. λ”°λΌμ„œ HTTPκ°€ 가진 캐싱 κΈ°λŠ₯이 적용 κ°€λŠ₯ν•˜λ‹€. HTTP ν”„λ‘œν† μ½œ ν‘œμ€€μ—μ„œ μ‚¬μš©ν•˜λŠ” Last-Modified νƒœκ·Έλ‚˜ E-Tagλ₯Ό μ΄μš©ν•˜λ©΄ 캐싱 κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ‹€.

  • Self-Descriptiveness(자체 ν‘œν˜„ ꡬ쑰) REST API λ©”μ‹œμ§€λ§Œ 보고도 이λ₯Ό μ‰½κ²Œ 이해할 수 μžˆλŠ” 자체 ν‘œν˜„ ꡬ쑰둜 λ˜μ–΄ μžˆλ‹€.


REST API의 μ‚¬μš©

  • URIλŠ” μžμ› 자체λ₯Ό ν‘œν˜„ν•΄μ•Ό ν•œλ‹€.

  • μžμ›μ— λŒ€ν•œ ν–‰μœ„λŠ” HTTP Method둜 ν‘œν˜„ν•œλ‹€.

    ex ) μ‚­μ œ
    -- GET /students/delete/1 (X)
    -- DELETE /students/1 (O)

    ex ) 쑰회
    -- GET /students/show/1 (X)
    -- GET /students/1 (O)

    ex ) 생성
    GET /students/insert/2 (X)
    POST /students/2 (O)

  • μŠ¬λž˜μ‹œ κ΅¬λΆ„μž(/)λŠ” 계측 관계λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 데 μ‚¬μš©ν•œλ‹€.

  • λΆˆκ°€ν”Όν•˜κ²Œ κΈ΄ URI 경둜λ₯Ό μ‚¬μš©ν•˜κ²Œ λœλ‹€λ©΄ ν•˜μ΄ν”ˆ(-)을 μ‚¬μš©ν•΄ 가독성을 높일 수 μžˆλ‹€.

  • URI 문법 ν˜•μ‹(RFC 3986)은 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜κΈ° λ•Œλ¬Έμ— ν˜Όλž€μ„ 막기 μœ„ν•΄ μ†Œλ¬Έμž ν˜•νƒœλ₯Ό μ„ ν˜Έν•œλ‹€.

  • 직관적인 REST APIλ₯Ό μœ„ν•΄ μ»¬λ ‰μ…˜(μžμ›μ˜ λͺ¨μŒ)κ³Ό λ„νλ¨ΌνŠΈ(μžμ›)λ₯Ό μ‚¬μš©ν•  λ•Œ λ‹¨μˆ˜, 볡수 ν‘œν˜„μ„ 지킀면 μ’‹λ‹€.


πŸ’¬πŸ’¬πŸ’¬

REST와 RESTfulμ΄λΌλŠ” 말을 자주 μ‚¬μš©ν•œλ‹€. λ‚˜λŠ” REST APIλ₯Ό μ μš©ν•˜κ³  μžˆλ‹€κ³  λ§‰μ—°νžˆ μƒκ°ν–ˆκ³ , μ΄λŠ” μ‹€μ œλ‘œ λ””ν…ŒμΌν•œ λ‚΄μš©μ€ λͺ¨λ₯Έμ±„ λŒ€λž΅μ μΈ κ°œλ…λ§Œ μ•Œκ³  μž‘μ—…μ„ ν•˜κ²Œ λ˜λŠ” 문제둜 μ΄μ–΄μ‘Œλ‹€. ν•˜μ§€λ§Œ λ¬Έμ œκ°€ μžˆμœΌλ―€λ‘œ μ’€ 더 ν•™μŠ΅ν•  수 μžˆλŠ” 계기가 λ˜μ–΄ ν•˜λ‚˜μ˜ 지식을 μŠ΅λ“ν•  수 μžˆμ—ˆλ‹€κ³  μƒκ°ν•œλ‹€.

0개의 λŒ“κΈ€