[백엔드 첫 걸음] 스프링 컨텐츠-(api)

khyojun·2022년 7월 8일
0

Spring 시작

목록 보기
5/15

API?

API는 Application Programing Interface라는 용어로써, 어떠한 응용프로그램에서 데이터를 주고 받기 위한 방법을 의미합니다. 어떤 특정 사이트에서 특정 데이터를 공유할 경우 어떠한 방식으로 정보를 요청해야 하는지, 그리고 어떠한 데이터를 제공 받을 수 있을지에 대한 규격들을 API라고 하는것입니다! API라고 하는것이죠

즉 데이터를 주고받기 위할때 어떤 방식으로 제공하며 어떤 데이터를 제공 받을 수 있는지에 대한 규격 : API

@ResponseBody란?

우선은 간단히 자바 객체를 HTTP 응답 몸체로 전송, HTTP 요청의 body내용으로 매핑하는 역할로 알아두자.

@ResponseBody 문자 반환

📂 HelloPracticeController.java

 @GetMapping("api-practice")
    @ResponseBody
    public String api_practice(@RequestParam("info") String info) // 자바 메소드 명명 특수문자는 _와 $만 허용한다.
    {

        return "이 api연습 중입니다. 받은 정보는 " + info + "입니다.";
    }

api 방식에서는 @ResponseBody 어노테이션이 사용이 된다?
--> viewResolver를 사용하지 않기 때문이다.
--> 대신 HTTP의 Body에 문자 내용을 직접 반환한다.
ex) http://localhost:8080/api-practice?info=spring
을 하게 되면 아래에 있는 "이 api 연습 중입니다. 받은 정보는 spring 입니다."로 출력이 바로 된다.


Responsebody 객체 반환

📂 HelloPracticeController.java

  @GetMapping("api-object-practice")
    @ResponseBody
    public Api api_obj(@RequestParam(value="name", required = false) String name, @RequestParam(value = "age", required = false) Optional<Integer> age){
        Api api= new Api();
        api.setAge(age);
        api.setName(name);
        return api;
    }
    static class Api{ 
    // api 방식으로 진행이 될 때 문자나 그런 것들은 그대로 가는데 객체로 전달받는 경우에는 json 으로 변환이 되어 가게 된다.
        private String name;
        private Optional<Integer> age;
        // optional은 npe(null pointer exception 방지 용도 -> null이 발생하면 안되는 경우를 방지하기 위해 optional로 감싸주는 것

        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Optional<Integer> getAge() {
            return age;
        }
        public void setAge(Optional<Integer> age) {
            this.age = age;
        }
    }

작동방식은 다음 그림과 같이 이루어진다.

api

@ResponseBody 사용

  • HTTP의 BODY에 문자 내용을 직접 반환
  • viewResolver 대신에 HttpMessageConverter가 동작
  • 기본 문자처리: StringHttpMessageConverter
  • 기본 객체처리: MappingJackson2HttmpMessageConverter
  • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있다.

추가로 알게 된 점

Java8에서는 Optional 클래스를 사용해 NPE를 방지할 수 있도록 도와준다. Optional는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다. Optional 클래스는 아래와 같은 value에 값을 저장하기 때문에 값이 null이더라도 바로 NPE가 발생하지 않으며, 클래스이기 때문에 각종 메소드를 제공해준다.

아까의 나이 부분에 optional을 사용한것은 integer로 받아들여진 부분에 널값이 들어갈 경우 npe가 발생하기 때문에 Optional로 감싸주는 작업이 필요하였다...

참고

profile
코드를 씹고 뜯고 맛보고 즐기는 것을 지향하는 개발자가 되고 싶습니다

0개의 댓글