[spring boot]RestApi

2024. 11. 12. 16:00·SPRING BOOT
반응형

 

 

 

 

Rest API
Representational State Transfer API

 


 

Rest VS RESTful

 

📍REST

  • 아키텍처 스타일: REST는 웹과 같은 분산 시스템의 아키텍처를 설계하기 위한 원칙과 제약 조건을 정의한다. REST는 리소스(데이터)와 그 상태를 표현하는 방법에 중점을 두고 있다.
  • 제약 조건: REST는 통일된 인터페이스, 상태 비저장성, 캐싱, 계층화된 시스템 등 여러 가지 제약 조건을 포함한다. 이러한 제약 조건은 시스템의 확장성과 유연성을 높이는 데 기여한다.
  • 리소스 중심: REST는 리소스(예: 사용자, 제품 등)를 중심으로 설계되며, 각 리소스는 URI(Uniform Resource Identifier)를 통해 식별된다.

📍RESTful

  • HTTP 메서드 중심: RESTful은 HTTP 프로토콜을 사용하는 웹 서비스의 설계 방식. RESTful API는 HTTP 메서드(예: GET, POST, PUT, DELETE)를 사용하여 리소스에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행한다.
  • 모범 사례: RESTful API는 일반적으로 HTTP 메서드와 URI를 조합하여 리소스를 조작한다. 예를 들어, GET /users는 사용자 목록을 가져오고, POST /users는 새로운 사용자를 생성하는 식이다.
  • 상태 유지: RESTful 설계는 REST의 상태 비저장성 원칙을 따르지만, 실제 구현에서 클라이언트와 서버 간의 상태를 관리하는 방법이 다양할 수 있다.

 

 


 

html에서 전체적으로 비동기 호출방식으로 구현하였다.

   <ul>
     <li><a id="get"     href="/api/article">Article 목록조회 Get</a></li>
     <li><a id="getOne"  href="/api/article">한개 Article 조회 Get</a></li>
     <li><a id="post"    href="/api/article">새글 추가 Post</a></li>
     <li><a id="patch"   href="/api/article">글 수정 Patch</a></li>
     <li><a id="delete"  href="/api/article">글 삭제 Delete</a></li>
     <li>&nbsp;</li>
     <li><a id="transaction1"  href="/api/transaction-test">트랜잭션 테스트(오류3개저장됨)</a></li>
     <li><a id="transaction2"  href="/api/transaction-test2">트랜잭션 테스트(0개 저장됨)</a></li>   
   </ul>
   
const  outputEl  =  document.querySelector('#output') 
const  aElList   =  document.querySelectorAll('a');  // 모든 a tag
aElList.forEach( function( aEl ) {
aEl.onclick  =  function( e ) {
    e.preventDefault();  // 기본이벤트를 취소: a tag 를 누르면 href로 이동한다
    e.stopPropagation();

    switch( aEl.id )

 

@Controller : 해당하는 View 파일로 제어를 이동

return : String(viewname), ModelAndView

@RestController : DATA를 돌려받는다. (모든 type 가능 ) : @Controller + @ResponseBody

METHOD : Get, POST, DELETE, PUT

결과 : String data ( text, xml, json (추천) ) 형태

 

 

REST METHOD CRUD

CREATE  POST
READ  GET
UPDATE  PUT, PATCH
DELETE  DELETE


🧩HTML

 

a태그나 input type="submit" 또는 button type="submit" 요소를 포함하는 form 태그는 GET방식으로 요청하게 된다.


그 외에 <form method="POST"> , <form method="DELETE"> 와 같이 요청방식을 지정할 수 있다.

 

전체적으로 비동기 호출방식으로 구현하였다.

1.GET

get은 select같은 역할을 한다.

 

🌿목록조회

            case "get":            // 목록조회
                //alert("get");
            	fetch( aEl.href  )
            	  .then((response) => response.json())
            	  .then(( articleList ) => {
                      console.log(articleList)
                      displayList( articleList, outputEl )
            	  })
@Slf4j
@RestController
public class ArticleApiController {

	@Autowired
	private  ArticleService  articleService;

	@GetMapping(value = "/api/article", 
		produces = MediaType.APPLICATION_JSON_VALUE	)
	public  List<Article>  list(  ) {
		List<Article> list = articleService.getList();
		System.out.println( "server data"+list );
		return  list;
	}

get방식의 요청을 자동을 매핑한다.

  • Get : /api/article 목록조회
  • 결과 출력 : json으로 출력하라
  • MediaType
    MediaType은 MIME 타입을 정의하는 클래스. MIME 타입은 웹에서 전송되는 데이터의 형식을 나타내며, 클라이언트가 어떤 형식의 데이터를 기대하는지를 알려준다.

  • APPLICATION_JSON_VALUE
    APPLICATION_JSON_VALUE는 MediaType 클래스에서 제공하는 상수로, JSON 형식을 나타내는 MIME 타입인 application/json을 의미합니다. 즉, 이 값은 메서드가 JSON 형식의 데이터를 반환할 것임을 나타냅니다.

  • produces = "application/json;charset=utf-8")
    produces = "application/xml;charset=utf-8")  ~> JACKSON  라이브러리 추가 

 

🌿게시글 한 개 조회

case "getOne":          // 한개 조회
    const  numId = document.querySelector('#id').value;

    // /api/article/3
    fetch( aEl.href + "/" +  numId  )
      .then( response => response.json() )   // JSON.parse(넘어온 data) -> json
      .then( article  => {
           console.dir(article)
           display(article)
       } )  // 정상
      .catch( error => {
           console.log(error)
           alert(error)
       })    //  오류처리
    break;
    
	// GetOne :  1개 만 조회
	@GetMapping("/api/article/{id}")
	public  Article  show(@PathVariable("id") Long id) {
		Article  article  =  articleService.getArticle( id );
		log.info("====== article:", article);
		return   article;		
	}

 

 

2.POST

insert와 같은 역할을 한다.

 

 

3.PATCH/PUT

Update와 같은 역할을 한다.

 

4.DELETE

delete와 같은 역할을 한다.

반응형

'SPRING BOOT' 카테고리의 다른 글

[spring boot] Spring Security  (0) 2024.11.18
restserver,restclient  (0) 2024.11.16
[spring boot] HTTP호출방식  (0) 2024.11.11
[spring boot] JPA와 H2 데이터베이스로 간단한 게시판 만들기  (0) 2024.11.09
[spring boot] 머스태치(mustache)/JPA  (0) 2024.11.08
'SPRING BOOT' 카테고리의 다른 글
  • [spring boot] Spring Security
  • restserver,restclient
  • [spring boot] HTTP호출방식
  • [spring boot] JPA와 H2 데이터베이스로 간단한 게시판 만들기
라텐느
라텐느
이제 막 개발을 시작한 초보가 개인공부를 하는 공간입니다.
  • 라텐느
    괴발개발
    라텐느
    • 개발자 (154)
      • HTML|CSS (14)
      • JAVA (29)
      • JAVACSCRIPT (15)
      • SQL (16)
      • 기타 (5)
      • JSP (2)
      • SPRING (13)
      • SPRING BOOT (6)
      • Git&GitHub (1)
      • 시행착오 (2)
      • 개발일지 (35)
        • GreenMiniProject1 (12)
        • GreenMiniProject2 (9)
        • GreenFinalProject (14)
      • Flutter (5)
      • 자격증 (0)
        • SQLD (1)
      • AWS (2)
      • Linux (1)
      • 자료구조&알고리즘 (4)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 태그
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    태그
    db
    JQuery
    HTML
    부트캠프
    티스토리챌린지
    링크
    JS
    개발자
    input
    SQL
    java
    tag
    javascript
    일지
    자기계발
    오블완
    CSS
    AJAX
    link
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
라텐느
[spring boot]RestApi
상단으로

티스토리툴바