spring.rest.ver2

정재호·2024년 9월 12일

restfull

뷰가 없고 data만 만듬
text

> xml
> json
> text

>d
<
클라이언트가 자원(DB)을 가져갈수있도록 서버입장에서 표현을 해야(만들어야)합니다.
표현은 크게 - 주소

rest api 만든다는것은
주소 +요청방식(get, post)
하나의 rest open api로 표현식
client가 자원을 가져가게 하기위해 주소를 만들어주는것
자바, 파이썬 접속 api 든 가져올수 있습니다.

jsp도 쓰지않고 분리

@RestController
@RequestMapping("/api")

List bookList(){
}
파이썬이 읽어갈때
타입을 바꾼다. JSON 구조로 바꿉니다.
통일성
lightweight data-interchange format 데이터 바꾸는 포맷(가벼움) name/value pairs
json.org

xml : 의미 , 태그를 붙여서 용량이 커집니다.


  private  final BookService bookService;

@RequiredArgsConstructor

생성자 주입방식
아니면 오토와이드 사용

package kr.smhrd.restcontroller;

import kr.smhrd.entity.Book;
import kr.smhrd.service.BookService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/api") // Open AIP(URL)
@RequiredArgsConstructor
public class BookRestController {

  private  final BookService bookService;

  @GetMapping("/bookList")
  public List<Book> bookList(){
      List<Book> list=bookService.bookList();
      return list;
  }
}

여기서 라이브러리가 하나 있어야겠습니다.

implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.0'

스프링이 내부적으로 해줍니다.
; // MessageConverter API 동작(jackson-databind)

스프링 부트는 기본장착입니다.

통신하는 거 설치 > 포스트맨



여기서 테스트 확인합니다. 뷰 없이(벡엔드)
c r u d 할 수 있게 합니다.

분리개발하려고 합니다.
Rest 만들고 파이썬에서 만들고 파이썬에서 가져갈 수 있습니다.
파이썬도 플라스크로 Rest 만들고 할 수 있습니다.

PostMapping("/book") // title, price, author, page
파라미터 날리면, form 등 으로 하면 통일성x
post는 데이터 받는거
resst는
json으로 데이터 받음
// {
"title":"딥러닝",
"price":40000,
"author":"나길동",
"page":500
}
JSON받아서 북으로 넘김
@RequestBody Book book
book으로 변환

리턴 통일 방법필요 나중에함


Rest | 파이썬
View


자바에서 서버 포트 8081 , 8082 나눠서 해볼수도 있습니다.

자신이 쓰려면 컨트롤 만들고 jsp 갔다가 rest를 갔다가 옵니다.

package kr.smhrd.restcontroller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

// React.js, Next.js : Route
// http://localhost:8081/s02/list --> list.jsp
@Controller
public class RouteController {

  @GetMapping("/list")
  public String list(){
      //책 목록을 데이터 베이스에서 가져온다(X) GET: http://localhost:8081/s02/api/book
      return "list"; //list.jsp
  }

}

list 요청
list.jsp 줍니다.

web + react, next.js >> web 풀스택
web + ai >> 깊게 학습 필요 , 밸런스부족..

위 리소스 map
아래 리소스 자바, css
자바스크립트js를 외부에 만듭니다.


@리스트컨트롤을 쓰기위해

list.jsp가 list.js가 불러와야합니다.

function bookListFn(){
  //console.log("bookListFn()");
  // Rest API 통신
 // GET : http://localhost:8081/s02/api/book
 // $.ajax()
 fetch().then().then().catch();

}

바닐라js



밖으로 빼거나

안으로 넣거나

람다식

매개변수 1개면
.then(response=>{ })
() 를 제거
1줄이면
.then(response=>{ return response.json(); })
아래처럼
.then(response=> response.json())

.

.then(response=>{
      if(!response.ok){
          throw new Error("Network error");
      }
  return response.json();
 })

.

      books.forEach(function(){   });
    books.forEach(()=>{});
    books.forEach(book=>{

}

            html+="<td>book.id</td>"; # 이거는 고정

          html+="<td>"+book.id+"</td>";

          html+=`<td>${book.id}</td>`;
백틱 사용방법

업로드중..

function bookListFn(){
  console.log("bookListFn()");
  // Rest API 통신
 // GET : http://localhost:8081/s02/api/book
 // $.ajax()
 // get방식 . 응답 callback함수 .  .  .
 fetch("http://localhost:8081/s02/api/book")
 .then(response=> response.json())
 .then(books=>{
       // 동적으로 뷰를 만들어서 출력...
      let html="";
      books.forEach(book=>{
          html+="<tr>";
          html+=`<td>${book.id}</td>`;
          html+=`<td>${book.title}</td>`;
          html+=`<td>${book.price}</td>`;
          html+=`<td>${book.author}</td>`;
          html+=`<td>${book.page}</td>`;

          html+="</tr>";
      });
      document.getElementById("blist").innerHTML=html;

   })
 .catch(error=>{
  console.log(error);

 });

}
profile
성장하는 하루가 되자

0개의 댓글