[Network] REST API

Minji Jeong·2022년 4월 30일
0

Android

목록 보기
8/37
post-thumbnail

REST API

OPEN API를 사용해 본 적 있다면 REST API에 대해서 익히 들었을 것이다. 나도 REST API에 대해서 많이 들어보긴 했었는데, OPEN API를 사용하기 전까진 이름만 알지 누가 물어보면 확실하게 대답해 줄 수는 없었다. 이전 포스팅에 서버 통신 라이브러리 Retrofit에 대해서 작성했는데, REST API에 대해서 글을 남기지 않으면 허전해서 🍙 겸사겸사 다시 제대로 공부해볼 겸 이렇게 글을 쓰게 되었다.

REST API에 대해서 소개하기 전에, API란 무엇일까?

💡 API (Application Programming Interface)

응용 프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스다. 예를 들어 날씨 서비스용 API에서 사용자가 지역을 입력한다면, 웹 서버로부터 최고 기온, 최저 기온으로 구성된 응답을 받을 수 있다.

이렇게 서버와 상호 작용하여 정보를 검색하거나 기능을 수행하고자 할 때 사용자는 API를 이용해 원하는 것을 서버로부터 제공받을 수도 있고, 값을 저장하거나 변경할 수도 있다.

마찬가지로 REST API도 인터페이스다. 앞에 붙은 REST가 무엇을 의미할까?

REST(Representational State Transfer)란 http method를 통해 리소스를 처리하도록 설계된 아키텍쳐이다. http uri를 통해 자원을 명시하고, http method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD 연산을 적용하는 것이다. 여기서 '자원'이란 해당 소프트웨어가 관리하는 모든 것(문서, 그림, 데이터 등)이 될 수 있고, 자원은 JSON 혹은 XML 형태로 주고받을 수 있다. 이러한 특징들을 종합해보면 REST 아키텍처는 다음과 같은 구성요소를 가지고 있다.

  1. 자원 : URI
    클라이언트는 URI를 이용해서 자원을 지정한다.

  2. 행위 : HTTP method
    HTTP 프로토콜의 Method(POST, GET, PUT, DELETE)를 사용해 필요한 작업을 서버에 요청한다.

  3. 자원의 형태
    서버로부터의 응답은 JSON, XML, TEXT, RSS 등 여러 형태로 받을 수 있다.

CRUD 연산 종류

  • Create, Read, Update, Delete, HEAD

URI VS URL

URI(Uniform Resource Idendifier)
특정 리소스를 식별하는 통합 자원 식별자로, 인터넷에 있는 자원을 나타내는 유일한 주소이다.

URL(Uniform Resource Locater)
흔히 웹 주소라고도 하며, 네트워크 상에서 자원 위치를 알려주기 위한 규약으로, URI의 서브셋이다.

REST APIREST 아키텍처의 제약 조건을 준수하는 API인 것이다. 그렇다면 우리는 왜 REST API를 선호하는 걸까?

일단 REST API는 확장성과 재사용성을 높여 편리하게 유지보수 및 운용이 가능하다는 장점이 있다. 또한 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그래밍 언어로 클라이언트와 서버를 구현할 수 있다.

REST API는 설계 규칙을 잘 준수해야 RESTful하다고 할 수 있다. REST API 설계 규칙에 대해 간단하게만 소개하고 오늘 포스팅은 마무리하겠다.

💡 REST API 설계 규칙

  1. URI는 동사가 아닌 명사를, 대문자보다는 소문자 사용
http://minji.com/Eating 
http://minji.com/eat -> Good Example
  1. 마지막에 슬래시를 포함하지 않음
http://minji.com/Eating 
http://minji.com/eat -> Good Example
  1. 언더바 대신 하이폰 사용
http://minji.com/eat_candy
http://minji.com/eat-candy -> Good Example
  1. 파일확장자는 URI에 포함하지 않음
http://minji.com/eat_candy
http://minji.com/eat-candy -> Good Example
  1. 행위를 포함하지 않음
http://minji.com/delete-post/1
http://minji.com/post/1 -> Good Example

References

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://www.redhat.com/ko/topics/api/what-is-a-rest-api
https://www.charlezz.com/?p=44767
https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80

profile
Flutter Developer

0개의 댓글