1. REST API
REST(Representational State Transfer) API(Application Programming Interface) 의 약자로
HTTP URI를 통해 자원을 명시하고, HTTP Method(POST, GET ,PUT ,DELETE)를 통해
CRUD를 구현하여 Resource를 조작하도록 돕는 API입니다.
주로 웹 개발에 주로 사용되는 REST API는 HTML, XML, 일반 텍스트, JSON과 같은 다양한 형식으로 메시지를 반환, 수신 할 수 있어 보다 유연하게 사용 가능합니다.
2. HTTP Method
http Method는 GET, POST, PATCH, PUT 4가지로 구분됩니다.
1) GET 방식(READ)
GET방식은 서버의 정보를 조회할때 사용하며 select 적인 성향을 가지고 있습니다.
http://testurl.com?name=John&age=13
직접 웹브라우저에서 빨간색으로 표시된 방법으로 사용 할 수 있습니다.
데이터는 path나 query param을 통해 넘기는 경우가 많으며
URL 뒤에 "?"기호를 사용하여 URL과 넘겨줄 데이터를 구분하며 두개 이상의 key-value를 넣어줄때는 "&" 기호를 사용해 구분을 해줍니다.
위의 예시는 name에는 John을, age에는 13을 넣어준 예시입니다.
GET방식을 이용하게되면 HTTP메시지의 헤더에 요청데이터가 포함되어 캡슐화가 진행, 서버측에 데이터를 요청하게 됩니다.
URL뒤에 붙기때문에 길이제한이 있어 많은양의 데이터를 보내기 어렵다는 특징이 있습니다.
특히 http 버전이 낮은곳에서 사용한다면 조금만 데이터양이 커져도 에러가 나므로 주의해야합니다.
보통 DB의 기본키값을 보내 정보를 응답받는 경우가 많습니다.
Json형태의 데이터를 서버에 보내 조회해야 하는 경우에는 POST로 처리합니다.
2) POST(CREATE)
POST방식은 서버의 리소스를 변경하기 위해 사용됩니다.(글쓰기나 회원가입 등에서 사용됩니다.)
GET방식보다 많은 양의 데이터를 보내기 적합하며
HTTP 메시지의 Body에 데이터를 담아 전송합니다.
따라서 Body필드의 타입을 설명하는 Content-Type을 명시해줘야 합니다.
대표적인 Content-Type은 key-value 형식의 Json이 있습니다.
아래와 같이 form을 이용해서 submit을 하는 형태나 ajax를 통해 사용합니다.
<form action="/loginAction.do" method="post">
아이디 : <input type="text" name="id" />
비밀번호 : <input type="password" name="pw" />
<input type="submit" value="로그인">
</form>
꼭 리소스의 생성뿐만 아니라, 프로세스가 변경되는 경우에도 POST를 사용합니다.
사실 POST는 무적입니다.
Body에 데이터를 보내 처리하는경우 어디에서 어떤식으로 사용하든 자유롭게 사용이 가능합니다.
간단하게 update쿼리를 날리는 경우가 아니라면 POST를 사용하는 경우가 가장 많습니다.
3) PUT(UPDATE)
정보를 통째로 갈아끼울때 주로 사용되며
전체 엔티티를 모두 보내줘야합니다.
일부만 보낼시 보내지않은 속성은 모두 NULL이 되므로 주의하여야 합니다.
클라이언트가 서버에게 식별된 리소스를 보내줘야합니다.(URL의 path를 사용)
4) PATCH(UPDATE)
정보의 일부분을 변경할때 주로 사용됩니다.
PUT을 대신해서 통째로 변경할때 사용합니다.
3. 주의점
자원을 가지고 설계를 해야합니다.
부서정보를 가지고 설계한다고한다면
1. 다건조회(GET메서드)
"/dept"
2 단건조회(GET메서드)
"/dept/{id}"
3. 등록(POST메서드)
"/dept"
4. 수정(PUT OR PATCH 메서드)
"/dept/{id}"
5. 삭제(DELETE 메서드)
"/dept"
해당방법을 사용하여 URL과 ID, 자원만 가지고 설계해야합니다.
@RequestMapping("/updatedept")
등으로 URL에 행위가 들어가게 설계하는건 잘못된 방식인점을 주의해야합니다.
'개발상식' 카테고리의 다른 글
[개발상식] 인코딩과 binary (0) | 2021.08.16 |
---|---|
[개발상식] 정규표현식이란(with python) (0) | 2021.08.16 |
[개발상식] HTTP란 (0) | 2021.01.21 |
[개발상식] URI URL 차이점 (0) | 2021.01.21 |
[개발상식] 참조복사, 얕은복사, 깊은복사(얕은복사와 참조복사는 같은말일까?) (0) | 2020.09.22 |
댓글