07 API

bourbon·2021년 12월 16일
0

Spring

목록 보기
8/14
post-thumbnail

기존 HelloController.java 파일에 다음과 같이 추가해준다.

hello-spring/src/main/java/hello.hellospringg/controller/HelloController

@GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam("name") String name) {
        return "hello " + name;
    }

*@ResponseBody : http의 Body에 해당 데이터(리턴값)를 직접 반환한다는 의미

윗 코드 작성시 view역할 없이 입력했던 문자열이 그대로 보여진다.

@GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name) {
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }

    static class Hello {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

파라미터로 넘어온 name값을 넣고 hello라는 객체를 반환한다.

static 작성시 HelloController클래스 안에서 Hello클래스를 또 쓸 수 있다.

변수 name에 대한 *getter/setter를 만들어 줌으로서 해당 값을 꺼내고 넣어줄 수 있다.

*getter/setter : 라이브러리에서 접근할 수 있는 자바빈 표준방식 or Property 접근방식


프로그램 실행 후 브라우저에 http://localhost:8080/hello-api?name=spring 를 입력하면 위와 같이 *JSON방식으로 표현된다.

*JSON(JavaScript Object Notation) : 경량 데이터 기술언어로서 오브젝트 표기법을 바탕으로, 당초 XML이 사용되던 Ajax에서 변화하게 되었다. (출처: 그림으로 배우는 Http Network Basic)


API 동작 원리

  1. 웹 브라우저에서 local:8080/hello-api를 실행함.

  2. 내장 톰켓을 통해 helloController.java로 보냄.

  3. @ResponseBody를 만나면 hello객체JSON방식으로 웹 브라우저에 반환함.

  4. 만약 리턴값이 객체JsonConverter가, 문자StringConverter가 동작됨. (HttpMessageConverter)


@Response

  • HTTP의 BODY에 문자 내용을 직접 반환

  • 'viewResolver' 대신에 'HttpMessageConverter'가 동작

  • 기본 문자처리: 'StringHttpMessageConverter'

  • 기본 객체처리: 'MappingJacson2HttpMessageConverter'

  • byte처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

*참고 : 클라이언트의 HTTP Accept 헤어와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HpptMessageConverter'가 선택된다.


스프링 웹개발 방법

  • 정적컨텐츠 : 파일을 그대로 반환함.

  • MVC와 템플릿엔진 : 템플릿을 model/view/controller로 쪼개고, view(html)를 템플릿엔진으로 필요한 만큼 변환(렌더링)한 다음, 변환된 html을 클라이언트에 반환함.

  • API : 주로 객체를 반환하는데, HttpMessageConverter를 통해 JSON방식으로 변환한 다음, 그 데이터를 그대로 HTTP Response에 넣어 반환함.


profile
Do things that don't scale

0개의 댓글