ν‹°μŠ€ν† λ¦¬ λ·°

πŸ”Ž OPEN API?

OPEN APIλŠ” ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” κ°œλ°©λ˜μ–΄ μžˆλŠ” μƒνƒœμ˜ Interface(약속)λ‹€.

λŒ€λΆ€λΆ„μ˜ OPEN APIλŠ” RESTλ°©μ‹μœΌλ‘œ μ§€μ›λœλ‹€.

 

πŸ”Ž REST API?

RESTλŠ” 'Representational State Transfer'의 μ•½μ–΄λ‘œ,

ν•˜λ‚˜μ˜ URIλŠ” ν•˜λ‚˜μ˜ κ³ μœ ν•œ λ¦¬μ†ŒμŠ€(Resource)λ₯Ό λŒ€ν‘œν•˜λ„λ‘ μ„€κ³„λœλ‹€λŠ” κ°œλ…μ— 전솑방식을 κ²°ν•©ν•΄μ„œ μ›ν•˜λŠ” μž‘μ—…μ„ μ§€μ •ν•œλ‹€.

 

HTTP URIλ₯Ό 톡해 μ œμ–΄ν•  μžμ›(Resource)λ₯Ό λͺ…μ‹œν•˜κ³ , HTTP Method(GET, POST, PUT, DELETE)을 톡해

ν•΄λ‹Ή μžμ›(Resource)λ₯Ό μ œμ–΄ν•˜λŠ” λͺ…령을 λ‚΄λ¦¬λŠ” λ°©μ‹μ˜ μ•„ν‚€ν…μ²˜μ΄λ‹€.

 

βœ”οΈREST ꡬ성.

β–ͺ️ μžμ› (Resource) - URI

β–ͺ️ ν–‰μœ„ (Verb) - HTTP Method

β–ͺ️ ν‘œν˜„ (Representations)

 

잘 ν‘œν˜„λœ HTTP URI둜 λ¦¬μ†ŒμŠ€λ₯Ό μ •μ˜ν•˜κ³  HTTP method둜 λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ ν–‰μœ„λ₯Ό μ •μ˜ν•œλ‹€.

λ¦¬μ†ŒμŠ€λŠ” JSON, XMLκ³Ό 같은 μ—¬λŸ¬κ°€μ§€ μ–Έμ–΄λ‘œ ν‘œν˜„ν•  수 μžˆλ‹€.

 

βœ”οΈ κΈ°μ‘΄ Service와 REST Service

β–ͺ️ κΈ°μ‘΄ Service : μš”μ²­μ— λŒ€ν•œ 처리λ₯Ό ν•œ ν›„ κ°€κ³΅λœ dataλ₯Ό μ΄μš©ν•˜μ—¬ νŠΉμ • ν”Œλž«νΌ(Python, Java, C...)에 μ ν•©ν•œ ν˜•νƒœμ˜ View둜 λ§Œλ“€μ–΄μ„œ λ°˜ν™˜.

β–ͺ️ REST Service : data 처리만 ν•œλ‹€κ±°λ‚˜, 처리 ν›„ λ°˜ν™˜λ  dataκ°€ μžˆλ‹€λ©΄ JSONμ΄λ‚˜ XML ν˜•μ‹(언어에 쒅속적이지 μ•ŠμŒ)으둜 전달. View에 λŒ€ν•΄μ„œλŠ” μ‹ κ²½ μ“Έ ν•„μš”κ°€ μ—†λ‹€. ==> μ΄λŸ¬ν•œ 이유둜 Open APIμ—μ„œ 많이 μ‚¬μš©.

 

πŸ“ REST.

β–ͺ️ 기쑴의 μ „μ†‘λ°©μ‹κ³ΌλŠ” 달리 μ„œλ²„λŠ” μš”μ²­μœΌλ‘œ 받은 λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄ μˆœμˆ˜ν•œ 데이터λ₯Ό μ „μ†‘ν•œλ‹€.

β–ͺ️ 기쑴의 GET/POST 외에 PUT, DELETE 방식을 μ‚¬μš©ν•˜μ—¬ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ CRUD 처리λ₯Ό ν•  수 μžˆλ‹€.

β–ͺ️ HTTP URIλ₯Ό 톡해 μ œμ–΄ν•  μžμ›(Resource)을 λͺ…μ‹œν•˜κ³ , HTTP METHOD(GET/POST/PUT/DELETE)λ₯Ό 톡해 

ν•΄λ‹Ή μžμ›μ„ μ œμ–΄ν•˜λŠ” λͺ…령을 λ‚΄λ¦¬λŠ” λ°©μ‹μ˜ Architecture이닀.

β–ͺ️ κ°€μž₯ 큰 단점은 λ”± μ •ν•΄μ§„ ν‘œμ€€μ΄ μ—†μ–΄ 암묡적인 ν‘œμ€€λ§Œ μ •ν•΄μ Έ μžˆλ‹€.

 - 언더바(_)λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. (가독성)

 - νŠΉλ³„ 경우 μ œμ™Έν•˜κ³  λŒ€λ¬Έμž μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

 - URI λ§ˆμ§€λ§‰μ— μŠ¬λž˜μ‹œ(/)λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

 - μŠ¬λž˜μ‹œ(/)둜 계측 관계λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

 - ν™•μž₯μžκ°€ ν¬ν•¨λœ 파일 이름을 직접 ν¬ν•¨μ‹œν‚€μ§€ μ•ŠλŠ”λ‹€.

 - URIλŠ” λͺ…사λ₯Ό μ‚¬μš©ν•œλ‹€.

 

 

βœ”οΈ REST κ΄€λ ¨ Annotation.

β–ͺ️ @RestController

  : Controllerκ°€ REST 방식을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ κ²ƒμž„μ„ λͺ…μ‹œ.

β–ͺ️ @ResponseBody

  : JSP 같은 뷰둜 μ „λ‹¬λ˜λŠ” 것이 μ•„λ‹ˆλΌ 데이터 자체λ₯Ό 전달.

β–ͺ️ @PathVariable

  : URL κ²½λ‘œμ— μžˆλŠ” 값을 νŒŒλΌλ―Έν„°λ‘œ μΆ”μΆœ.

β–ͺ️ @CrossOrigin

  : Ajax의 크둜슀 도메인 문제λ₯Ό ν•΄κ²°.

  => 이 컨트둀러λ₯Ό μ•„λ¬΄λ‚˜ μ ‘μ†ν•˜λ©΄ μ•ˆλ˜λŠ” 경우, λˆ„κ΅¬ν•œν…Œλ§Œ 연결을 ν•΄μ£Όκ² λ‹€ ν•˜λŠ” 경우 @CrossOrigin(urlμ„€μ •)을 ν•˜μ—¬

이 url에 ν•΄λ‹Ήν•˜λŠ” 곳은 μ ‘κ·Όν•  수 μžˆμ§€λ§Œ 이것이 μ•„λ‹Œ 애듀은 접근을 λͺ»ν•˜λ„둝 ν•œλ‹€. (λ³΄μ•ˆμ  μΈ‘λ©΄)

β–ͺ️ @RequestBody

  : JSON 데이터λ₯Ό μ›ν•˜λŠ” νƒ€μž…μœΌλ‘œ 바인딩.

   => κΈ°μ‘΄μ—λŠ” Dtoλ₯Ό λ°›λŠ”λ° Dto라 섀정해놓고 μ €μͺ½μ—μ„œ λ„˜κ²¨μ£ΌλŠ” νŒŒλΌλ―Έν„° 이름과 Dtoκ°€ κ°€μ§€κ³  μžˆλŠ” ν”„λ‘œνΌν‹° 이름을 λ˜‘κ°™μ΄ 맞좰주면 μ•Œμ•„μ„œ λ“€μ–΄κ°„λ‹€. μ΄λ²ˆμ—λŠ” νŒŒλΌλ―Έν„°λ‘œ λ„˜μ–΄μ˜€λŠ”κ²Œ μ•„λ‹ˆλΌ Ajax의 JSON ν˜•νƒœλ‘œ λ„˜μ–΄μ˜¨λ‹€. json ν˜•νƒœλ‘œ λ„˜μ–΄μ˜¨ 값듀을 dto에닀 받을 λ•Œ @RequestBodyν•΄μ„œ νŒŒλΌλ―Έν„° 이름이 μ•„λ‹ˆλΌ Json Object둜 보내쀀 값을 Dto의 νŒŒλΌλ―Έν„°λ‘œ λ§€ν•‘μ‹œμΌœμ£ΌλŠ” 역할을 ν•œλ‹€.

 

μ΅œκ·Όμ— 올라온 κΈ€
Total
Today
Yesterday