Day75 :) RestAPI

Nux·2022년 1월 5일
0

자바웹개발

목록 보기
89/105
post-thumbnail
post-custom-banner

API

  • Application Programming Interface
  • 애플리케이션과 운영체제(혹은 프로그래밍 언어가 제공하는 기능) 사이의 상호작용 지원

Rest

  • Rest: Representational State Transfer
  • 웹 사용 시의 제약조건들을 정의하는 소프트웨어 아키텍쳐 스타일
  • 이름으로 구분된 자원의 상태를 주고 받는 모든 것

구성요소

GET /students/hong
Response 
{
    "name": "홍길동",
    "age": 30,
    "gender": "male"
}
  • 자원: HTTP URL을 통해 자원을 구별/명시
    • /students/hong
  • 행위: 클라이언트는 HTTP method(post, get, put, delete)를 통해 자원에 crud 적용
    • GET
  • 표현: 클라이언트의 요청을 받았을 때 자원의 상태를 나타냄
    • JSON

특징

Uniform

  • HTTP 표준만 따르면 특정 언어나 기술에 종속되지 않고 모든 플랫폼에서 사용가능

Stateless

  • 작업을 위한 상태정보(세션이나 쿠키정보)를 따로 저장/관리하지 않음
    • 데이터를 주고받는 것으로 끝나야 함

Cacheable

  • HTTP 표준을 그대로 사용하므로 캐시 적용 가능
    • 캐시: 서버 지연을 줄이기 위해 페이지, 이미지 등의 웹 문서들을 임시 저장하는 기술
  • 많은 요청을 효율적으로 처리 가능

Self-descriptiveness

  • 요청 메세지만 보고도 이해 가능한 자체표현 구조로 되어있음

Client-Server

  • 자원을 갖고 있는 서버, 자원을 요청하는 클라이언트로 구성됨
  • 서버와 클라이언트의 역할이 확실히 분리시켜 상호 의존성을 줄임

계층형 구조

  • 서버에서 여러 계층을 추가하여 유연한 구조로 개발가능

REST API

  • REST 특징을 기반으로 구현한 API

RESTful API

  • REST의 규칙을 잘 지켜서 설계된 API

REST API설계규칙

명사와 소문자 사용

http://example/getSample(X)
http://example/Sample(X)
http://example/sample(O)

슬래시(/)로 계층관계 표현

http://example/students/hong

URI 마지막에 슬래시(/)를 포함하지 않음

언더바(_) 대신 하이픈(-) 사용

응답상태코드 사용

확장자를 URI에 포함하지 않음

http://example/students/hong.html(X)
http://example/students/hong(O)
참고

Spring REST api 구현

라이브러리(jackson) 추가

  • jackson mapper 라이브러리를 의존성 추가(pom.xml)
    • 자바↔json 텍스트로 상호 변환시킴
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.13.1</version>
</dependency>	

RestController 작성

  • 두가지 어노테이션이 있으며 적절한 것을 선택하여 사용

@Controller 사용하기

@Controller
@ResponseBody
public class Sample1{
	로직
}

@RequestBody

  • 클라이언트가 요청한 XML/JSON을 자바 객체로 전달받음

@ResponseBody

  • 자바 객체를 XML/JSON으로 변환해서 Body에 전송

@RestController 사용하기

@RestController
public class Sample2{
	로직
}
  • @Controller+@ResponseBody
  • 모든 메서드가 뷰 대신 객체로 작성됨
post-custom-banner

0개의 댓글