본문 바로가기

iOS 앱 개발자 프로젝트

[iOS] Rest API

URLSession 에 대해 공부하던 중,

Rest API에 대해서도 별도로 정리해 둡니다. (๑•̀ – •́)و


| Rest API

:  REST(Representational State Transfer) 기반으로 서비스 API를 구현한 것

 

최근 OpenAPI(누구나 사용할 수 있도록 공개된 API: 구글 맵, 공공 데이터 등), 마이크로 서비스(하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처) 등을 제공하는 업체 대부분은 REST API를 제공한다.

API는 항상 메뉴얼도 함께 제공된다. URI를 모르면 클라이언트는 사용할 수 없다.

 

 

 

 

 

[REST API]

REST의 특징을 기반으로한 웹 API

구글, 네이버, 카카오 등 IT 회사라면 각 회사의 서비스를 활용할 수 있는 REST API를 지원

 

[REST API의 특징]

각 요청이 어떤 동작이나 정보를 위한 것인지 요청 그 자체로 추론이 가능

 

[REST API의 작동 방식]

HTTP 요청을 통해 통신함으로써 리소스 내에서 레코드의 CRUD등을 수행

(ex : GET 요청을 사용해 레코드를 검색, POST 요청으로 레코드 작성 등)

 

1. 클라이언트가 서버에 요청함. 클라이언트가 API 문서에 따라 서버가 이해하는 방식으로 요청 형식을 지정

2. 서버가 클라이언트를 인증. 해당 요청을 수행할 수 있는 권한이 있는지 확인

3. 서버가 요청을 수신. 내부적으로 처리.

4. 서버가 클라이언트에 응답을 반환. 응답에는 요청 성공여부 정보, 요청한 모든 정보 등이 포함

 

[REST API 디자인 가이드]

1. URI는 정보의 자원을 표현해야 한다

2. 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.

 

[RESTful API]

RESTful한 API는 요청사항을 한 눈에 이해하기 쉽다. 

 

 

 

 

[REST API 설계 규칙]

 

1. 슬래시 구분자(/ )는 계층 관계를 나타내는데 사용

http://restapi.example.com/houses/apartments

 

2. URI 마지막 문자로 슬래시(/ )를 포함하지 않는다.

- REST API는 분명한 URI를 만들어 통신을 해야 하기 때문에 혼동을 주지 않도록 URI 경로의 마지막에는 슬래시(/)를 사용하지 않는다.

http://example.com/posts/    (X)


3. 하이픈(-)은 URI 가독성을 높이는데 사용

- 불가피하게 긴 URI경로를 사용하게 된다면 하이픈을 사용해 가독성을 높인다.

 

4. 밑줄(_)은 URI에 사용하지 않는다.

- 밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 하므로 가독성을 위해 밑줄은 사용하지 않는다.

 

5. URI 경로에는 소문자가 적합하다. 대문자 사용은 피하도록 한다.

- RFC 3986(URI 문법 형식)은 URI 스키마와 호스트를 제외하고는 대소문자를 구별하도록 규정하기 때문
파일확장자는 URI에 포함하지 않는다.

 

6. REST API에서는 메시지 body 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않는다.
Accept header를 사용한다.

http://restapi.example.com/members/345/photo.jpg (X)
GET / members/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg (O)


7. 리소스 간에는 연관 관계가 있는 경우
=> /리소스명/리소스 ID/관계가 있는 다른 리소스명

GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)

 

※ 정리
1) only 명사, 소문자  o
2) 명사는 복수형
3) URI 마지막은 / 는 포함하지 않는다.
4) URI는 언더바를 사용하지 않으며 하이픈(-)을 사용한다.
5) 파일의 확장자를 표시하지 않는다.

 

 

 

references

https://junvelee.tistory.com/107

https://stdio-han.tistory.com/88