일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 제약조건레이아웃
- html
- 초보
- 안드로이드프로그래밍
- 앱
- 네트워크 개념
- Android
- gradle
- 레이아웃
- firebase
- HTML 문법
- udacity
- HTML 기초
- onMeasure
- Udacity Firebase
- 프로그래밍
- REST API
- retrofit
- 제약
- CustomView
- 어플리케이션
- 웹프로그래밍
- 안드로이드
- view
- 파이어베이스
- OnDraw
- RESTful
- Retrofit2
- 커스텀뷰
- 안드로이드 통신
- Today
- Total
Polyglot's language & programming story.
REST API는 무엇인가? 본문
저희 학교 개발 동아리 사수께서 RESTful API를 공부하라고 말씀하셔서...
공부차 포스팅을 하게 되었습니다 :D
네트워크 통신 개념이 전무한지라 RESTful API이 무엇인지 아예 감이 안 잡혔습니다. (많이 부족함을 느낍니다.)
아무튼, 이번 포스팅은 RESTful API가 무엇인지 알아보도록 합니다.
1. API의 뜻은 무엇인가?
IT직군에서 근무하시거나 컴퓨터 공학을 전공하시는 분들께서는 API에 대해서 많이 들어보실텐데요.
많이 사람들이 이 용어를 사용하지만 정확한 뜻을 모르는 경우가 허다합니다(저도 포스팅 전까진 몰랐어요.)
API는 Application Programming Interface의 약자입니다.
Interface는 물건을 조작하기 위한 디자인을 말하고, 물건 자체의 디자인 뿐 아니라 동작 방식까지 디자인 하는 것을 말합니다.
예를 들어 키보드, 마우스, 모니터등이 있고 키보드를 누르는 방법, 마우스를 클릭하는 방법, 모니터 출력 방법까지 정의하는 것을 의미 합니다.
API(Application Programming Interface)는 응용프로그램 프로그래밍을 위한 디자인이라는 뜻인데, 중요한 건 API는 사람을 위한 인터페이스가 아닌 프로그램을 위한 인터페이스라는 점입니다.
2. API의 예시
그렇다면 프로그램을 위한 디자인의 예를 들어볼까요?
실례 1) 게임에서 카카오톡 친구 추가 요청이 왔을 때
- 게임프로그램이 카카오톡 API를 사용해서 친추 요청을 보낸다.
실례 2) 어떤 웹 사이트에서 가입을 할때 페이스북 아이디로 가입하기
- 웹 어플리케이션이 가입을 할 때 페이스북 API를 사용해서 id 정보를 받아온다.
등으로 예로 들 수가 있습니다.
즉 API는 어플리케이션 프로그래밍을 하기 위해 서로간의 통신 방법을 말합니다.
3. RESTful API는 무엇이지?
RESTful API는 (REpresentation State Transfer API의 약자입니다.)
한국어로 표현하자면.. 표현적인 상태 전송 어플리케이션 프로그래밍 디자인으로 풀어 쓸 수가 있는데요.
RESTful API는 네트워크에서 주로 이루어져있는 "사이트 구성 원리"입니다.
4. RESTful(표현 상태 전송)의 6가지 원칙(웹의 구조적 특징)
RESTful을 잘 표현하려면 지켜야되는 6가지의 원칙이 있고 이를 잘 지키는 웹의 구조적 특징에 대해 살펴보겠습니다.
1. 클라이언트/ 서버 구조
클라이언트와 서버는 서로 어떻게 구현되어 있는지 알 수 없고 일관적 규칙으로 통신 하며 서로 독립적
2. 무상태
서버가 클라이언트의 상태를 관리할 필요 없으며, 필요하다면 해당 상황에 대한 정보를 직접 관리한다.
3. 캐시 처리 가능
콘텐츠 전송망을 사용해서 캐시를 처리
4. 계층화
네트워크에 중간 매체 강화(미들웨어, 보안등을 넣는다.), 또한 부하 분산(로드 밸런싱)을 구현
5. Code on Demand
자바 스크립트 코드를 넣는 것
6. 인터페이스 일관성
URI를 이용한 리소스 식별, 표현을 통한 리소스를 처리(HTML, JSON, XML), 자기서술적 메시지(header를 통한 메타데이터를 통해 데이터 전송 방식을 알려줌)
위의 원칙중에서 1~5번까지는 웹에서 충분히 잘 구현이 되어 있기 때문에 우리가 신경쓸 점은 인터페이스의 일관성
을 유지해서(RESTful API 방식을 지켜서) 간결하고 꾸임새가 좋은 웹을 만드는 것입니다!
5. RESTful API 설계 (인터페이스 일관성)
RESTful 하게 잘 설계를 하려면 규칙을 잘 알아두고 적용해야만 합니다. 아래에 있는 규칙을 잘 숙지해야 RESTful API를 설계를 할 수가 있습니다.
1. URI 기본 원칙
a. 마지막 문자로 '/'를 포함하지 않는다.
b . 가독성을 높이기 위해서 "_"가 아닌 "-"를 사용한다.
c . 소문자만 사용
d . URI 에는 확장자를 넣지 않는다. (header를 사용해서 con, accept에 넣도록 한다.)
e. Url의 의미중 명사가 리소스, 동사를 메소드로 만든다.
f. '/'는 계층 관계를 나타내는데 사용한다.
2. 리소스 형식
a. 도큐먼트
리소스 자체 , 데이터 베이스의 레코드와 같음 Ex)http://api.books.com/books/1 (1이 document)
b. 컬렉션
여러 도큐먼트가 모인 것 Ex) http://api.books.com/books (books가 컬렉션)
c. 스토어
d. 컨트롤러
CRUD 이외의 것 Ex) http://api.books.com/books/buy (구매한다라는 CRUD이외의 형태)
3. 명명 규칙 (Conventional Naming Rules)
a. CRUD(Create, Read, Update, Delete)는 URI에 표시하지 않는다.
b. 도큐먼트는 단수로 표현한다.
c. 컬렉션은 복수로 표현한다.
d. 스토어는 복수로 표현한다.
e. 컨트롤러는 동사/ 동사구로 표현한다.
4. 요청 메서드
a. GET : 리소스 상태를 읽는다.
b. HEAD : 리소스의 메타데이터를 읽는다.
c. PUT : 리소스를 수정한다.
d. POST : 리소스를 생성한다.
e. DELETE : 리소스를 삭제한다.
f. 메서드 사용 예시
메소드 리소스 ID 의미
GET /posts 글(posts) 목록을 봅니다.
POST /posts 글을 생성합니다.
PUT /posts/:id 글을 수정합니다.
DELETE /posts/:id 글을 삭제합니다.
g. 메소드를 사용할 때 리소스 속성및 개수의 변화
|
수행하기 전, 후
|
반복 수행한 결과
|
리소스의 수
|
GET
|
같다
|
같다
|
같다
|
POST
|
다르다
|
다르다
|
많아진다
|
PUT
|
다르다
|
같다
|
같다
|
DELETE
|
다르다
|
다르다
|
적어진다.
|
5. 응답 상태 코드
a. 2xx :정상 처리(성공)
b. 3xx : 실패하지 않은 요청 중 비정상 처리(변경 및 이동)
c. 4xx : 비정상 처리(실패)
d. 5xx : 에러
응답 상태 코드 참고: https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
6. 표현 방법.
표현은 JSON ,HTML, XML 등으로 표현을 하는데, 주로 JSON을 사용한다고 알려져있다.
6. 설계시 유의할 점.
1. id와 리소스 이외의 정보를 URI에 담으면 안된다.
PUT /dogs/1/isSick (X) 직접 정보를 전달하면 안된다.
PUT /dogs/1?isSick=true (O) ?를 사용해서 파라미터로 넘겨준다.
2. "무엇(명사)"를 생성하는 지 잘 생각해보아야된다.
POST /login (X)
POST /users/login (X)
POST /session (O) (로그인을 할때 서버에서 세션을 생성하기 때문에 명사를 생각해서 적습니다.)
7. RESTful API를 왜 사용하는 것인가?
1.URL 주소만 보고도 수행하려는 동작을 눈치챌 수 있게 된다.
2. 웹사이트를 간결하게 만들 수가 있다.
3. 웹의 장점을 최대한으로 살릴 수가 있다.
참고 링크
http://meetup.toast.com/posts/92
https://www.youtube.com/watch?v=80PbMwOquJs
https://www.youtube.com/watch?v=ETdbm5jDDsg
https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
https://m.blog.naver.com/azure0777/220749852024