Android

[Android] μ•ˆλ“œλ‘œμ΄λ“œ REST API

Forest Yun 2021. 6. 18. 18:03
728x90

​

HTTP (Hypertext Transfer Protocol: ν•˜μ΄νΌλ³Έλ¬Έ μ „μ†‘κ·œμ•½)

: μΈν„°λ„·μ—μ„œ, μ›Ή μ„œλ²„μ™€ μ‚¬μš©μžμ˜ 인터넷 λΈŒλΌμš°μ € 사이에 λ¬Έμ„œλ₯Ό μ „μ†‘ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” 톡신 κ·œμ•½μ„ λ§ν•œλ‹€.

HTML λ¬Έμ„œμ™€ 이미지, λ™μ˜μƒ, μ˜€λ””μ˜€, ν…μŠ€νŠΈ λ¬Έμ„œ 등을 μ£Όκ³  λ°›λŠ”λ‹€.

+ μ„œλ²„μ— REST API둜 μš”μ²­μ„ 보낼 λ•Œ HTTP κ·œμ•½μ— 따라 μ‹ ν˜Έλ₯Ό μ „μ†‘ν•œλ‹€.

​

​

​


​

​

​

REST

(Representational State Transfer : λŒ€ν‘œμ  μƒνƒœ 전달 )

μƒνƒœ 전달: 데이터가 μš”μ²­λ˜μ–΄μ§€λŠ” μ‹œμ μ—μ„œ μžμ›μ˜ μƒνƒœ(정보)λ₯Ό μ „λ‹¬ν•˜λŠ” 것을 λœ»ν•œλ‹€.

:μ›Ή μ‹œμŠ€ν…œ (λΆ„μ‚°λœ ν•˜μ΄νΌλ―Έλ””μ–΄ μ‹œμŠ€ν…œμ„ μœ„ν•œ 아킀텍쳐 μŠ€νƒ€μΌ)ꡬ쑰, HTTP ν”„λ‘œν† μ½œ μž₯점을 살릴 수 μžˆλŠ” λ„€νŠΈμ›Œν¬ 기반 μ•„ν‚€ν…μ²˜

REST API -> REST ν˜•μ‹μ˜ API

​

+API λ‚΄μš© 정리

https://blog.naver.com/88yhtserof/222208729830

 

[Android] μ•ˆλ“œλ‘œμ΄λ“œ API

​API ( application programming interface : μ‘μš© ν”„λ‘œκ·Έλž˜λ° μΈν„°νŽ˜μ΄μŠ€): μš΄μ˜μ²΄μ œμ™€ μ‘μš©ν”„λ‘œκ·Έλž¨ ...

blog.naver.com

​

​

보톡 RESTλŠ” HTTP λ₯Ό 톡해 CRUDCreate(생성), Read/Retrieve(읽기/인좜), update(κ°±μ‹ ), Delete/Destroy(μ‚­μ œ/파괴) λ₯Ό μ‹€ν–‰ν•˜λŠ” APIλ₯Ό λœ»ν•œλ‹€.

->REST 의 κ°€μž₯ μ€‘μš”ν•œ νŠΉμ„±: μ–΄λ–€ λ™μž‘μ΄λ‚˜ 정보λ₯Ό ν•„μš”ν•œ 것인지 λ°”λ‘œ μ•Œ 수 μžˆλ‹€.

​

RESTλŠ” HTTPκ°€ κ°€λŠ₯ν•œ λͺ¨λ“  κ³³μ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.

HTTP ν”„λ‘œν† μ½œμ„ μ΄μš©ν•˜κΈ° λ•Œλ¬Έμ— URLroute λ₯Ό 톡해 μžμ›μ„ νŠΉμ •μ§“κ³  HTTP vebs동사 λ₯Ό 톡해 ν•  일(CRUD)을 μ§€μ •ν•œλ‹€. λ˜ν•œ JSON λ˜λŠ” XMLλ₯Ό 톡해 데이터λ₯Ό μ£Όκ³  λ°›λŠ” 것이 μΌλ°˜μ μ΄λ‹€.

​

​


​

​

​

<RESTλ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•œ 쑰건>

​

1. ν΄λΌμ΄μ–ΈνŠΈ - μ„œλ²„ ꡬ쑰

: μžμ›(resource)이 μžˆλŠ” μͺ½μ΄ μ„œλ²„, ν΄λΌμ΄μ–ΈνŠΈλŠ” κ·Έμ € μ œκ³΅λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 μ ‘κ·Όν•˜μ—¬ 응닡을 λ°›κ³  μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœλŠ” μ‹ κ²½ 쓰지 μ•Šκ³  μ œκ³΅ν•œ μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•œ 처리만 λ‹΄λ‹Ήν•˜μ—¬ μš”μ²­μ΄ λ“€μ–΄μ˜¬ λ•Œ 그에 λ§žλŠ” 응닡을 μ œκ³΅ν•˜λ©΄ λœλ‹€. μ΄λ ‡κ²Œ 역할이 ν™•μ‹€ν•˜κ²Œ κ΅¬λΆ„λ˜λ©΄ μ„œλ‘œμ˜ κ°œλ°œμ— μžˆμ–΄μ„œ μ˜μ‘΄μ„±μ΄ μ€„μ–΄λ“€κ²Œ λœλ‹€.

​

​

​

2. λ¬΄μƒνƒœstateless: μ„œλ²„λŠ” μš”μ²­μ„ λ…λ¦½μ μœΌλ‘œ 인식해야 ν•œλ‹€.

​

3. μΊμ‹œ 처리 κ°€λŠ₯Cacheable: λŒ€λŸ‰μ˜ μš”μ²­μ„ 효율적으둜 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μΊμ‹œκ°€ μš”κ΅¬λœλ‹€.

​

4. 계측화Layeres System

: μ„œλ²„λŠ” API μ„œλ²„μ— μ—¬λŸ¬ 계측을 μΆ”κ°€ν•˜μ—¬ μœ μ—°ν•œ ꡬ쑰둜 개발될 수 μžˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈλŠ” 이와 상관없이 REST API μ„œλ²„λ§Œ ν˜ΈμΆœν•œλ‹€.

​

5. Code on demand optional

:ν΄λΌμ΄μ–ΈνŠΈκ°€ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ ν‘œν˜„μ„ μ‘λ‹΅μœΌλ‘œ 받은 ν›„ μ²˜λ¦¬ν•˜λŠ” Codeλ₯Ό μ„œλ²„κ°€ μ œκ³΅ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

​

6. μΈν„°νŽ˜μ΄μŠ€ 일관성

​

​

​

​


​

​

​

​

RESTful

RESTλŠ” 쑰건 κ΅¬ν˜„λ°©μ‹μ— μ œμ•½μ„ 두지 μ•ŠκΈ° λ•Œλ¬Έμ— ꡬ체적인 κ°€μ΄λ“œλΌμΈμ€ μ—†λ‹€. λ‹€λ§Œ μ—¬λŸ¬ κ°œλ°œμžλ“€μ΄ λΉ„κ³΅μ‹μ μœΌλ‘œ μ˜κ²¬μ„ μ œμ‹œν•œ RESTful을 톡해 κ°€μ΄λ“œλΌμΈμ΄ μ œμ‹œλœλ‹€.

λͺ©ν‘œ: μ΄ν•΄ν•˜κΈ° 쉽고 μ‚¬μš©ν•˜κΈ° μ‰¬μš΄ REST API μž‘μ„±

​

CRUD HTTP verbs Route
resourceλ“€μ˜ λͺ©λ‘μ„ ν‘œμ‹œ GET https://(도메인)/resource
resource ν•˜λ‚˜μ˜ λ‚΄μš©μ„ ν‘œμ‹œ GET https://(도메인)/resource/:id(ν‘œμ‹œν•  λ‚΄μš©μ˜ 인덱슀)
resourceλ₯Ό 생성 POST https://(도메인)/resource
resourceλ₯Ό μˆ˜μ • PUT https://(도메인)/resource/:id(μˆ˜μ •ν•  λ‚΄μš©μ˜ 인덱슀)
resourceλ₯Ό μ‚­μ œ DELETE https://(도메인)/resource/:id(μ‚­μ œν•  λ‚΄μš©μ˜ 인덱슀)
일뢀 resource μˆ˜μ • PATCH https://(도메인)/resource/id(μˆ˜μ •ν•  λ‚΄μš©μ˜ 인덱슀)

GET

: κ°€μ Έμ˜€κΈ°. 링크λ₯Ό ν΄λ¦­ν•˜κ±°λ‚˜ μ£Όμ†Œ ν‘œμ‹œμ€„μ— URL을 μž…λ ₯ν•  λ•Œλ§ˆλ‹€ λΈŒλΌμš°μ €κ°€ μ‚¬μš©ν•˜λŠ” 것이닀. URL둜 μ‹λ³„λœ 데이터λ₯Ό ν΄λΌμ΄μ–ΈνŠΈλ‘œ μ „μ†‘ν•˜λ„λ‘ μ„œλ²„μ— μ§€μ‹œν•œλ‹€. GET의 μš”μ²­ 결과둜 μ„œλ²„ μΈ‘μ—μ„œ κ²Œμ΄ν„°λ₯Ό μˆ˜μ •ν•΄μ„œλŠ” μ•ˆλœλ‹€. GET은 읽기 μ „μš©μ΄λ‹€.

​

PUT : 놓기. ν΄λΌμ΄μ–ΈνŠΈκ°€ URL에 μ˜ν•΄ μ‹λ³„λ˜λŠ” λ¦¬μ†ŒμŠ€λ₯Ό μ—…λ°μ΄νŠΈ μš”μ²­ μ‹œ μ‚¬μš©ν•œλ‹€.

​

POST : κ²Œμ‹œ. μƒˆ λ¦¬μ†ŒμŠ€λ₯Ό 생성할 λ•Œ μ‚¬μš©ν•œλ‹€.

​

DELETE : μ‚­μ œ. μš”μ²­ UPL둜 μ‹λ³„λ˜λŠ” λ¦¬μ†Œλ₯Ό μ‚­μ œ μš”μ²­ μ‹œ μ‚¬μš©ν•œλ‹€.

​

PATCH: 일뢀 resourceλ₯Ό μˆ˜μ • μš”μ²­ μ‹œ μ‚¬μš©

​

+ POST/ PUT/PATCHμ—λŠ” BODYλΌλŠ” μ£Όλ¨Έλ‹ˆκ°€ μžˆμ–΄ 정보λ₯Ό GETμ΄λ‚˜ DELETE 보닀 비ꡐ적 μ•ˆμ „ν•˜κ³  많이 보낼 수 μžˆλ‹€.

​

​

RESTfulν•˜μ§€ λͺ»ν•œ 예:

- CRUDκΈ°λŠ₯을 λͺ¨λ‘ POST둜만 μ²˜λ¦¬ν•˜λŠ” API

- Route에 resource, id μ™Έ 정보가 λ“€μ–΄κ°€λŠ” 경우

(/students/updateName, student ν•˜λ‚˜μ˜ μ΄λ¦„λ§Œ λ³€κ²½ν•˜λŠ” API의 경우 PUT students/:id/name이 λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.)

​

​

​

​

​

<μ‘λ‹΅μ½”λ“œ>

:HTTP μ‘λ‹΅μ½”λ“œλŠ” ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μš”μ²­κ²°κ³Όλ₯Ό μ•Œλ €μ€€λ‹€.

μƒνƒœ μ½”λ“œ μš©λ‘€
200 OK μš”μ²­μ„ μ„±κ³΅μ μœΌλ‘œ μ²˜λ¦¬ν•¨
201 Created μƒˆ λ¦¬μ†ŒμŠ€ 생성 성곡.
PUT λ˜λŠ” POST μš”μ²­μ˜ 성곡을 ν™•μΈν•˜λŠ” 데 μ‚¬μš©
400 Bad Request μš”μ²­ ν˜•μ‹μ΄ 잘λͺ»λ¨.
특히 데이터가 μœ νš¨μ„± 검사λ₯Ό ν†΅κ³Όν•˜μ§€ λͺ©ν•˜κ±°λ‚˜ 잘λͺ»λœ ν˜•μ‹μ΄ 경우 POST λ˜λŠ” PUT μš”μ²­μ—μ„œ λ°œμƒν•œλ‹€.
404 Not Found μš”μ²­ν•œ λ¦¬μ†ŒμŠ€κ°€ μ—†μŒ.

​

​

​

​


​

​

​

​

​

[μš©μ–΄ 정리]

​

μ•„ν‚€ν…μ²˜(Architecture): 컴퓨터λ₯Ό κΈ°λŠ₯λ©΄μ—μ„œ λ³Έ ꡬ성방식, μ΅œμ ν™”λ₯Ό λͺ©ν‘œλ‘œ 두고 μ‹œμŠ€ν…œ ꡬ성과 λ™μž‘μ›λ¦¬ 그리고 μ‹œμŠ€ν…œμ˜ κ΅¬μ„±ν™˜κ²½ 듀을 μ„±λͺ… 및 μ„€κ³„ν•˜λŠ” 섀계도

​

ν•˜μ΄νΌλ―Έλ””μ–΄(hypermedia) : ν•˜μ΄νΌ ν…μŠ€νŠΈμ˜ μ„±μ§ˆκ³Ό λ©€ν‹° λ―Έλ””μ–΄μ˜ μ„±μ§ˆ λͺ¨λ‘λ₯Ό κ°–λŠ” κ²ƒμœΌλ‘œμ„œ 단지 ν…μŠ€νŠΈ 뿐만이 μ•„λ‹ˆλΌ λ©€ν‹°λ―Έλ””μ–΄ 정보인 ν…μŠ€νŠΈ, μŒμ„±, μ˜μƒλ„ ν¬ν•¨ν•˜μ—¬ 정보λ₯Ό κ΅¬μ„±ν•œ 것을 λ§ν•œλ‹€.

​

URL: μž‘μ—…ν•˜λ €λŠ” ν•­λͺ©μ„ μ‹λ³„ν•˜λŠ” 방법

URL은 μžμ›(resource)λ₯Ό μ‹λ³„ν•˜λŠ”λ° μ‚¬μš©ν•œλ‹€.(μžμ›-μ›ΉνŽ˜μ΄μ§€) resourceλ₯Ό κ³ μœ ν•˜κ²Œ 식별할 수 μžˆλ„λ‘ URLλ₯Ό μž‘μ„±ν•΄μ•Όν•œλ‹€. URL은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ²˜λ¦¬ν•˜λŠ” λͺ¨λ“  λ°μ΄ν„°μ˜ 지도 역할을 ν•œλ‹€.

​

CRUD(Create(생성), Read/Retrieve(읽기/인좜), update(κ°±μ‹ ), Delete/Destroy(μ‚­μ œ/파괴)

​

​

​

​

​

https://www.youtube.com/watch?v=iOueE9AXDQQ

μ°Έκ³  μ˜μƒ (μΆ”μ²œ)

https://m.blog.naver.com/azure0777/221066646741

참고 자료

https://tuhbm.github.io/2019/04/24/architecture/

참고 자료

https://mmlab.snu.ac.kr/~shlee/MMCW/doc1_1.htm

참고 자료

https://duehd88.tistory.com/entry/CRUD%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

참고 자료

https://code.tutsplus.com/tutorials/a-beginners-guide-to-http-and-rest--net-16340

참고 자료

https://code.tutsplus.com/tutorials/a-beginners-guide-to-http-and-rest--net-16340

참고 자료

728x90