출처

1. REST API, JSON

  • 웹 서비스를 사용하는 클라이언트에는 웹 브라우저 뿐만 아니라, 스마트폰, 태블릿 등이 있음.
    • 서버는 이러한 모든 클라이언트의 요청에 응답을 해야됨.
    • REST API사용.
  • REST(Representational State Transfer) API
    • 서버의 자원을 클라이언트에 구애받지 않고 사용할 수 있는 설계 방식.
    • REST API 방식에서는 HTTP 요청에 대한 응답으로 서버의 자원을 반환함.
    • 서버에서 보내는 응답은 특정 기기에 종속되지 않도록 모든 기기에서 통용될 수 있는 데이터를 반환함.
  • 서버클라이언트의 요청에 대한 응답으로 화면(view)이 아닌 데이터(data)를 전송함.
    • 이때 사용하는 응답 데이터JSON(JavaScript Object Notation)임.
    • 과거에는 XML을 많이 사용했지만, 최근에는 JSON으로 통일되는 추세.

1-1. API

  • API(Application Programming Interface)
    • API란 애플리케이션을 간편히 사용할 수 있게 하는, 미리 정해진 약속으로, 사용자와 프로그램 간 상호 작용을 도움.
    • REST API클라이언트서버사이의 상호작용, 즉 HTTP 요청에 따른 JSON 응답에 대한 약속임.

1-2. XML, JSON 데이터 형식 비교.

  • XML은 사용자 정의형 HTML.
  • JSONJavaScript방식을 차용한 객체 표현식.
XML : Extensible Markup Language
<article-form>
  <id>1</id>
  <title>제목입니다.</title>
  <content>내용입니다.</content>
</article-form>
JSON : JavaScript Object Notation
{
  "id": 1,
  "title": "제목입니다.",
  "content": "내용입니다."
}
  • JSON 데이터는 키(key)값(value)으로 구성된 정렬되지 않은 속성(property)의 집합임.
    • 키(key)문자열이므로 항상 큰따옴표("")로 감싸고, 값(value)은 문자열인 경우에는 큰따옴표("")로 감싸주면 됨.

1-3. REST API 동작.

  • {JSON} Placeholder 사이트(https://jsonplaceholder.typicode.com).
    • 가짜(fake) API를 사용해서 무료로 각종 테스트를 해볼 수 있는 서비스를 제공함.

  • HTTP 요청 코드 -> JSON 데이터 응답.

  • 가짜 더미 데이터로 HTTP 요청을 보내고 응답 결과를 확인할 수 있음.
    • 사이트에서 제공하는 자원(resources)들.

  • REST API는 모든 HTTP 메서드를 지원함.
  • Routes를 보면 메서드별로 요청을 보낼 때 사용하는 URL 경로가 나와있음.
  • 하단에 guide 클릭.

1-3-1. 단일 데이터 조회.

  • 단일 데이터를 조회하는 예시.
    • URL 경로가 https://.../post/1을 보니 1번 게시글을 조회하는 요청임.
    • 출력 결과(output)를 보면 1번 게시글의 id, title, body, userId가 응답 됐음.
    • 데이터를 조회할 때는 method의 속성 값으로 GET을 써야하는데 GETmethod 속성의 기본값(default)이라 이 경우 생략해도 됨.

1-3-2. 모든 데이터 조회.

  • 모든 데이터를 조회하는 예시.
    • 위와 마찬가지로 GET 요청이라서 method 속성을 생략.
    • URL경로는 https://.../posts.

1-3-3. 데이터 생성 요청.

  • 새 게시글을 등록하는 예시.
    • 데이터 생성 요청이므로 method의 속성 값은 POST.
    • URL경로는 https://.../posts.
    • 요청의 body 부분을 보면 JSON 데이터로 새 게시글의 title(제목), body(내용), userId(사용자 아이디) 값도 같이 보낸 것을 확인할 수 있음.

1-3-4. 데이터 수정 요청.

  • PUT Vs PATCH
    • PUT : 기존 데이터전부 새로운 데이터로 변경함. 기존 데이터가 없다면 새로 생성함.
    • PATCH : 기존 데이터 중에서 일부만 새로운 데이터로 변경.
PUTPATCH
  • 게시글을 수정하는 예시.
    • 데이터 수정 요청이므로 method의 속성 값은 PUTPATCH를 사용했음.
    • 요청 URL 경로는 https://../posts/1이므로 1번 게시글 수정 요청임을 알 수 있음.
      • PUT 방식 : 1번 데이터의 속성을 모두 수정 요청했음.
      • PATCH 방식 : 1번 데이터의 title만 수정 요청 했음.

1-3-5. 데이터 삭제 요청.

  • 게시글을 삭제하는 예시.
    • 데이터 삭제 요청이므로 method의 속성값으로 DELETE사용.
    • 요청 URLhttps://.../delete/1이므로 1번 게시글 삭제.

1-4. Talend API Tester.

  • 크롬 확장 프로그램 Talend API Tester을 이요해서 HTTP 요청을 보내고 돌아오는 응답을 확인할 수 있음.

1-4-1. 모든 데이터를 조회.

  • 모든 데이터를 조회.
  • 응답(Response)이 200으로 왔음.
    • 200은 요청이 잘 처리됐다는 것을 의미하는 상태 코드임.

1-4-2. 단일 데이터를 조회.

  • 1번 게시글을 조회.
    • 역시 마찬가지로 상태 코드200이 응답으로 왔음.

1-4-3. 존재하지 않는 데이터를 조회.

  • 데이터 조회 요청 실패.
    • 응답으로 404 에러가 떴음.
    • 상태 코드 404(not found)는 요청한 페이지를 찾을 수 없다는 의미.

1-4-4. 데이터 생성 요청.

  • 데이터 생성을 요청.

    • 응답으로 201이 왔음.
    • 상태코드 201은 데이터가 잘 생성됐음을 의미함.
  • body부분을 보면 새로 생성된 데이터가 JSON 형식으로 잘 반환되었음.

  • 하단 HTTP탭을 확인해 보면 요청 메시지시작 라인과 헤더에는 각종 정보가 있고, 본문에는 새로 생성할 데이터가 있음.

    • 그 밑에는 응답 메시지시작 라인과 헤더에는 응답 정보가 있고, 본문에는 생성 데이터가 실려서 반환되었음.
    • id는 자동으로 101번이 매겨졌음.

1-4-5. 데이터 생성 요청 실패.

  • 응답으로 500이 왔음.
    • 상태 코드 500은 서버 내부에서 에러가 발생했다는 것을 의미.

1-4-6. 데이터 수정 요청.

  • 응답으로 200.

1-4-7. 데이터 삭제 요청.

  • 응답으로 200.

1-5. HTTP 상태 코드.

  • HTTP 상태 코드클라이언트가 보낸 요청이 성공했는 지 , 실패했는 지 알려주는 코드임.
상태 코드설명
1XX(정보)요청이 수신되어 처리 중.
2XX(성공)요청이 정상적으로 처리되었음.
3XX(리다이렉션 메시지)요청을 완료하려면 추가 행동이 필요함.
4XX(클라이언트 요청 오류)클라이언트의 요청이 잘못되어 서버가 요청을 수행할 수 없음.
5XX(서버 응답 오류)서버 내부에 에러가 발생해 클라이언트 요청에 대해 적절히 수행하지 못했음.

1-5-1. HTTP 요청 메시지와 응답 메시지.

  • 요청과 응답은 HTTP 메시지에 실려서 전송됨.
    • 요청할 때는 HTTP 요청 메시지에, 응답할 때는 HTTP 응답 메시지에 내용이 실림.
  • HTTP 메시지시작 라인(start line), 헤더(header), 빈 라인(blank line), 본문(body)으로 구성됨.
    • 시작 라인 : HTTP 요청 or 응답 내용이 있음. 항상 한 줄로 끝남.
    • 헤더 : HTTP 전송에 필요한 부가 정보(metadata)가 있음.
    • 빈 라인 : 헤더의 끝을 알리는 빈 줄. 헤더가 모두 전송되었음을 알림.
    • 본문 : 실제 전송하는 데이터가 있음.

  • 요청 메시지시작 라인에는 요청의 종류(GET), , URL 경로(/posts/2), 사용하는 HTTP 버전(HTTP/1.1)이 있음.

  • 헤더에는 호스트 주소(jsonplaceholder.typicode.com, 어디로 보낼지에 대한 정보)가 있음.

  • 그 아래에는 응답 메시지.

    • 시작라인에는 HTTP 버전(HTTP/1.1)과 상태코드(200)이 있음.
  • 헤더에는 응답을 보낸 날짜(date), 응답 데이터 형식(content-type) 등이 있음.

  • 본문에는 메시지에 실어 보내는 실제 데이터가 있음.


2. 참고하기.

RedHat - REST API란?
AWS - RESTful API란?

profile
Every cloud has a silver lining.

0개의 댓글