27. 뉴스 REST API 서버 구현

2022. 7. 18. 18:43·Java Spring/JSP와 스프링


이전에 만든 뉴스서비스에 REST API를 추가하여

REST API 서버를 구현할것이다.

웹 기반 뉴스 서비스를 스마트폰에도 제공해야 하는 경우

REST API만 추가하면 스마트폰과 웹 모두 지원되는 웹 서비스 구현이 가능하다.

1️⃣ API 설계

뉴스 등록, 삭제, 목록, 상세 보기 기능 전부 API로 구현하며 

세부 API는 아래와 같다.

기능 메소드 URI 설명
뉴스등록 POST /news 뉴스 등록을 위한 데이터를 JSON으로 HTTP body에 전달.
뉴스삭제 DELETE /news/aid 뉴스 삭제를 위한 aid경로를 파라미터로 전달.
뉴스목록 GET /news 전체 뉴스 목록을 JSON으로 전달.
뉴스상세보기 GET /news/aid 특정 뉴스의 aid경로를 파라미터로 전달.

 

2️⃣ API 구현

클래스 생성 및 뉴스 등록

src/main/java의 ch12패키지에 NewsApiService클래스를 만들어주자.

package ch12;

import ch10.News;
import ch10.NewsDAO;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;

@Path("news")
public class NewsApiService {
    NewsDAO dao;

    public NewsApiService() {
        dao = new NewsDAO();
    }

    //뉴스등록
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public String addNews(News news) {
        try {
            dao.addNews(news);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return "News API : 뉴스 등록됨!!";
    }
}

ch10에서 만든 NewsDAO를 사용하기때문에 ch10을 임포트해줬다.

  • @POST : POST 방식으로 요청 처리.
  • @Consumes(...) : 클라이언트 요청에 포함된 미디어 타입의 유형을 지정

addNews() 메소드의 인자로 News타입이 요구된다.

@Consumes 설정에 따라 HTTP Body에 포함된 JSON 문자열이 자동으로 News로 변환된다ㅣ.

이를 위해 JSON 문자열의 키와 News 객체의 멤버 변수명이 동일해야한다.

 

결론은 API 요청을 받아들이는 부분만 제외하면

대부분은 dao의 메소드 호출해주는것으로 구현이 끝난다.

실질적으로 따져보면 dao.addNews() 하나이며, 

나머지는 처리부분이다.

뉴스 삭제

뉴스 삭제를 위해서 삭제할 뉴스의 aid가 필요하다.

여기서는 경로 파라미터를 사용해 삭제할 id값을 전달할것이다.

 

요청 메서드는 DELETE이며, GET으로 삭제를 요청하면 동작하지 않는다.

경로 파라미터는 @Path로 지정하고

인자에 @PathParam 애너테이션을 사용해 데이터가 전달되도록 할것이다.

@DELETE
@Path("{aid}")
public String delNews(@PathParam("aid") int aid) {
    try {
        dao.delNews(aid);
    }
    catch (SQLException e) {
        e.printStackTrace();
        return "News API : 뉴스 삭제 실패 !! - "+aid;
    }
    return "News API : 뉴스 삭제됨 !! - "+aid;
}

삭제의 경우 dao 처리 과정에서 문제가 생길수도 있다.

따라서 문제 발생시 에러 메시지를 리턴해줘야 한다.

뉴스 목록 조회

전체 뉴스 목록 조회는 JSON 배열 형태로 전달되어야한다.

그리고 여기에 List 타입을 리턴하면 자동으로 변환되며 별도 작업이 필요없다.

@GET
@Produces(MediaType.APPLICATION_JSON)
public List<News> getNewsList() {
    List<News> newsList = null;
    try {
        newsList = dao.getAll();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    return newsList;
}
  • @Produces : 응답 콘텐츠의 타입으로 앞에서 요청처리에 사용된 @Consumes와 같은 개념이다. 지정한 타입에 따라 리턴 객체를 처리하는 방법이 다르다.
뉴스 상세 정보 조회

목록에서 특정 뉴스를 선택했을때 상세정보를 제공하기 위한 요청은 GET방식을 사용하고 

삭제와 동일하게 동일하게 경로 파라미터를 사용해 aid를 전달할것이다.

@GET
@Path("{aid}")
@Produces(MediaType.APPLICATION_JSON)
public News getNews(@PathParam("aid") int aid) {
    News news = null;
    try {
        news = dao.getNews(aid);
    }
    catch (SQLException e) {
        e.printStackTrace();
    }
    return news;
}
  • 리턴타입은 News이고 @Produces를 통해 json으로 전달하게된다.

3️⃣ 실행 결과 확인

뉴스 서비스와 연동하기 때문에 DB와 연결되어있어야 한다.

필자의 경우 MariaDB를 사용했다.

그리고 톰캣을 실행하고 Postman에서 API를 호출해 결과를 확인하면 된다.

GET 방식의 경우 브라우저만으로도 테스트가 가능하다.

뉴스 목록 조회

우선 필자의 DB의 데이터는 이렇게 되어있다.

이제 포스트맨에 GET 메소드로 

localhost:포트/api/news를 입력하고 결과를 확인해보자.

뉴스 등록과 상세 정보 조회

뉴스를 등록해볼것이다.

그리고 아래처럼 설정해주자.

그리고 텍스트 작성공간에는 JSON데이터를 작성해줄것이다.

작성에 앞서 유의할점을 먼저 설명하겠다.

  • aid값은 DB에서 자동처리되므로 aid필드가 포함되지 않도록 해야한다.
  • 키와 값 모두 " "로 감싸야한다.
  • 각 필드 끝에는 , 가 들어가야 한다.
  • 마지막 데이터 필드에는 , 가 들어가면 안된다.
  • 이미지의 경우 이미지의 URL을 사용해야한다.

다음으로 아래 json코드를 복사해서 넣어보자.

{
	"title": "6인 이상 집합 금지",
	"img": "https://imgnews.pstatic.net/image/056/2021/03/27/0011014592_004_20210327061918078.png?type=w647",
	"date": "2021-03-28 13:55:35",
	"content": "코로나로 인한 집합 금지"
}

 

뉴스 삭제

뉴스 삭제는 요청 메소드를 DELETE로 하고 

파라미터로 aid값을 지정해서 보내보자.

 

만약 뉴스가 삭제되지 않는다면

NewsApiService에 아래 코드를 넣어주자.

import javax.websocket.server.PathParam;

 


[메인으로 돌아가기]

'Java Spring > JSP와 스프링' 카테고리의 다른 글

29. 스프링 MVC 컨트롤러 구현  (0) 2022.07.19
28. 스프링 개발환경 설정  (0) 2022.07.19
26. Postman으로 REST API 테스트  (0) 2022.07.18
25. JAX-RS로 REST API 서버 구현  (0) 2022.07.18
24. 한글 처리 필터 구현  (0) 2022.07.15
'Java Spring/JSP와 스프링' 카테고리의 다른 글
  • 29. 스프링 MVC 컨트롤러 구현
  • 28. 스프링 개발환경 설정
  • 26. Postman으로 REST API 테스트
  • 25. JAX-RS로 REST API 서버 구현
백고미
백고미
  • 백고미
    백고미의 정신세계
    백고미
  • 전체
    오늘
    어제
    • 분류 전체보기 (127)
      • [ 공지사항 ] (0)
      • 정보 (15)
        • 워프레임 (6)
        • 게임 (3)
        • 군대 (1)
        • 이민 (1)
      • Java Spring (43)
        • JSP와 스프링 (34)
        • Tip (9)
      • Spring boot (1)
        • Tip (1)
      • 직업 정보 (2)
        • 경찰 공무원 (2)
        • AAFES (0)
        • HD GFD (0)
      • 리뷰 (1)
        • 인터넷 (1)
      • Life (2)
        • 운동 (1)
        • 자격증 (1)
      • 소스모드 (28)
        • CSGO (7)
        • CSS (0)
        • HL2DM (3)
        • L4D2 (1)
        • BMS (0)
        • TIP (16)
        • Extension (1)
        • 문법 (0)
      • C# (4)
        • s&box (4)
      • LUA (8)
        • Garry's Mod (8)
      • Resource (11)
        • Player Model (1)
        • Npc Model (1)
        • Weapon Model (2)
        • PropPhyics (6)
        • PropDynamic (1)
        • Texture (0)
        • Animation Texture (0)
        • Overlay (0)
        • Effect Sound (0)
        • Particle (0)
      • 일기장 (1)
        • TRH (4)
        • 스케줄 (1)
        • Els (0)
        • 프로젝트 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • John John한 블로그
  • 공지사항

  • 인기 글

  • 태그

    경기북부병무청 회룡역
    경찰 공무원 응시 자격
    윈도우10 고양이
    순경 가산점
    윈도우10 참가자 프로그램
    병무청가는법
    원동기장치면허
    윈도우10 닌자캣
    경찰 가산점표
    경기북부 병무청 가는 길
    병무청가는길
    경기북부병무지청
    경기북부 병무청
    발표 PPT
    경기북부 병무청 가는 법
    키벨류
    경찰공무원 가산점표
    스쿼트 운동 효과
    병무청 가는 법
    경기북부병무청 망월사
    공찰공무원 필수과목
    윈도우10 1주년
    경찰공무원 선택과목
    운전면허 종류
    경기북부병무청
    경기북부병무청 가는법
    병무청 가는 길
    경찰시험 응시 자격
    경기북부 병무청 가는길
    경찰 간부후보생
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
백고미
27. 뉴스 REST API 서버 구현
상단으로

티스토리툴바