API: Application Programming Interface
: 한 프로그램에서 다른 프로그램으로 데이터를 주고받기 위한 방법
: 애플리케이션을 프로그래밍 할 때 보다 쉽게 할 수 있도록 해주는 도구들
: 코드를 통해 데이터를 주고 받음!
db.collection('웹툰').findOne({_id: parseInt(요청.params.id) }, function (err, res){
console.log(res);
res.render('detail.ejs', {data: 결과});
});
⇒ API code를 짜주어야 클라이언트가 코드를 실행할 수 있음API code:
app.get('/detail/:id', function(req, res) {
db.collection('웹툰').findOne({_id: parseInt(요청.params.id) }, function (err, res){
console.log(res);
res.render('detail.ejs', {data: 결과});
});
}
app.get('/detail/:id', function(req, res) {
: API (해당 url로 get을 요청하면)
db.collection('웹툰').findOne({_id: parseInt(요청.params.id) }, function (err, res){
console.log(res);
res.render('detail.ejs', {data: 결과});
: 해당 코드를 실행하자고 요청
API 설계 시 필요한 것
API가 가져야 할 내용
요청 방식
요청할 내용
자료 요청에 필요한 추가 정보
(웹의 경우 REST API라는 원칙에 따라 작성하는 것이 좋음)
REST API: A가 어떤 방식으로 요청하고, B가 어떤 방식으로 응답할지 지정해 놓은 다양한 형식 중 하나
API의 종류
프로그램 API: 해당 프로그램의 기능들 사용 가능
REST: 네트워크 상에서 클라이언트와 서버 사이의 통신 방식 중 하나
https://hahahoho5915.tistory.com/54
RESTful API Endpoint의 설계
/user/id
와 같이 식별 값을 추가로 사용한다회원가입, 로그인, 탈퇴 API URL Endpoint
POST/users/login
POST/users/id
와 같은 설계 불가능…/users/subjects
: uri상 교사가 관계 상 우선이 된다는 것을 표현 /users/id/subjects
: 특정 교사의 교과목 목록 표현/articles/hash-tag
vs /hash-tag/articles
→ 더 중요한 대상을 계층 관계에서 앞에 두는 방법을 이용하는 것이 좋음…Babel: 자바스크립트 컴파일러 중 하나… https://bravenamme.github.io/2020/02/12/what-is-babel/
Node.js는 기본적으로 실행시 CommonJS방식으로 실행되기 때문에 ES Module방식으로 실행하기 위해서는 별도의 설정이 필요…
{
"name": "playground-umc-7th-nodejs",
"type": "module"
}
*ES Module: require 대신 import, export를 이용해 라이브러리와 모듈을 더 안전하고 효율적으로 사용할 수 있게 해줌!
다른 계층에 영향을 주지 않으면서 특정 계층만 수정하고 확장할 수 있으므로 기능을 개발하면서 확장, 유지, 보수할 때 유리
*비즈니스 로직: https://mommoo.tistory.com/67
*프로젝트 아키텍쳐: https://yozm.wishket.com/magazine/detail/2743/
⇒ 클라이언트의 요청→ Controller가 요청 받아 Service에 전달→ DB가 필요한 경우 Repository를 통해 DB와 상호작용 하여 얻어낸 결과로 비즈니스 로직 처리→ Service가 결과를 Controller에 전달, 응답을 클라이언트에 전달
계층에 따른 폴더들을 생성해주세요. (controllers
, dtos
, repositories
, services
)
해당 폴더 내에서 파일을 생성해주세요. (user.controller.js
, user.service.js
, user.repository.js
)
각 폴더와 파일들이 어떤 의미를 갖는지 소개드리도록 하겠습니다.
node_modules
: Node.js 라이브러리들이 저장되어 있는 폴더 (자동 생성됨)public
: 정적 파일들을 사용할 때 사용 (이미지 등)src
: 소스 코드를 저장하는 폴더controllers
: Controller 코드를 저장하는 곳dtos
: DTO 코드를 저장하는 곳repositories
: 데이터 조작과 관련한 코드를 저장하는 곳services
: Service 관련 코드를 저장하는 곳오류 모음…
package.js 없어서 만들기…
branch 생성…ㅠㅠ
index 파일과 package 파일 혼동…
서버 프로젝트에는 다양한 상수와 비밀 값들이 필요하지만 이 값들이 깃허브에 업로드 되어서는 안됨…
⇒ .env 파일을 만들어 비밀 값들을 기록하고 해당 파일은 깃허브에 업로드되지 않도록 설정!!
연결 완!!
🆘 API 짜기 ~. ~
GET
: 리소스 조회(최근에는 Representation이라는 이름을 많이 사용한다.)POST
: 요청 데이터 처리, 주로 등록에 사용PUT
: 리소스를 대체, 해당 리소스가 없으면 생성PATCH
: 리소스 부분 변경DELETE
: 리소스 삭제