[SW 코딩] Express.js와 MongoDB - 02. REST API
01 REST API
- REST API란?
- REST + API
- REST 아키텍처를 준수하는 웹 API이고, RESTful API라고 부르기도 한다.
- API란? : Application Programming Interface
- REST란? : REpresentational State Transfer
- API 형태만 봐도 어떤 동작을 하는 API인지 알아보기 쉽게 하도록 하는 표현 방법에 대한 규칙
- 별도의 규칙이 존재하지 않아 가이드라고 표현하며, 가이드를 따르면 좋은 구조의 API를 구성할 수 있다.
- REST API 기본 가이드 - HTTP Method의 사용
- HTTP Method : HTTP의 요청과 응답, 웹 상에서의 프로토콜을 Method로 표현한 것
- GET, POST, PUT, DELTE 등이 있다.
- REST API 기본 가이드 - URL 표현법
- REST API는 URL을 통해 자원을 계층적으로 표현한다.
- users/1/posts/라는 URL은 '1번 유저의 게시글 전체'라는 자원을 나타낸다.
02 JSON
- JSON이란? : 자바스크립트에서 객체를 표현하는 표현식
- JSON을 사용하는 이유는 웹 API는 기본적으로 데이터를 문자열로 전송한다.
- 어떤 객체를 웹 API를 통해서 문자열로 전달하기 위해 JSON을 사용한다.
- JSON vs XML
- JSON이 더 적은 표현식을 사용하여 데이터를 효과적으로 표현한다.
- JSON 가이드 - Object : JSON은 기본적으로 Object 단위로 저장한다.
- JSON 가이드 - Array
03 Express.js로 REST API 구현하기
- Express.js를 이용한 미니 프로젝트
데이터베이스 없이 Node.js 모듈 활용
간단한 메모의 작성, 수정, 삭제, 확인 기능이 있는 API 구현
Express-generator를 사용하지 않고 MVC 패턴 구현
- MVC 패턴이란?
- MVC 패턴은 웹 서비스의 가장 대표적인 프로젝트 구성 패턴으로 프로젝트의 기능들을 어떻게 분리할지에 대한 구성 방법 중 하나이다.
- 각각의 요소는 Model - View - Controller를 구분하여 프로젝트 구조를 구성한다.
- Model : 데이터에 접근하능 기능 또는 데이터 그 자체를 의미한다. 데이터의 읽기, 쓰기는 Model을 통해서만 이루어지두록 구성해야한다.
- View : 데이터를 표현하는 기능을 의미한다. 주로 Controller에 의해 데이터를 전달받고 전달받은 데이터를 화면에 표시해주는 기능을 담당한다.
- Controller : Model을 통해 데이터에 접근하여, 처리 결과를 View로 전달하는 기능을 의미한다. 웹 서비스에선 주로 라우팅 함수가 해당 기능을 수행한다.
- Express.js로 MVC 패턴 구현하기
- 프로젝트 구현 사항
- 메모 목록 구현하기
- models 내 notes 배열은 id, 제목, 내용을 담고 있고, notes 모듈이 호출될 때 id와 title을 반환한다.
- MVC 패턴에서 M(정보)를 담당하는 부분이 models 이고, routes는 C 부분을 담당한다.
- routes 내 notes.js는 두 개의 모듈을 불러오고, Router() 객체를 만들고, 아무런 자원을 명시하지 않은 요청이 들어오게 되면 Note.list()를 json으로 반환하게 된다.
- 메모 상세 구현하기
- routes/ 부분에서 '/ :id 는 URL에 하나의 변수처럼 취급되는 파라미터이다.
- req.params.id를 통해 id를 통해 정보를 요청하게 되면
- models에는 id를 인자로 받는 하나의 함수 내 note를 반환하게 된다.
- 이 때 찾고자 하는 note가 없다면 요청하는 정보를 찾을 수 없다는 Error를 반환해준다.
- 다시 routes 부분에서 정상적으로 note를 받아오게 되었다면 json(note)를 반환한다.
- 오류가 발생하게 된다면 catch(e) 부분에 걸려, next(e) 부분인 오류 처리 핸들러가 실행된다.
- 메모 작성 구현하기
- 메모 수정 구현하기
- 메모 삭제 구현하기
- 오류 처리 미들웨어 구현하기
- status 500은 서버의 문제 발생이라는 의미이다.
- 정의되지 않은 라우팅에 404 오류 처리하기