Restful API, package.json (Node.js)
Restful API
Rest란?
Rest란 웹 서비스를 만들 때 사용하는 제약 조건을 정의하는 소프트웨어 아키텍쳐 스타일입니다.
CRUD Operation을 적용함
- Create : 생성(POST)
- Read : 조회(GET)
- Update : 수정(PUT)
- Delete : 삭제(DELETE)
- HEAD : header 정보 조회(HEAD)
REST의 장점
- HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구축할 필요하 없다.
- HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해준다.
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
- REST API 메세지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
- 여러가지 서비스 디자인에서 생길 수 있는 문제를 최소화한다.
- 서버와 클라이언트의 역할을 명확하게 분리한다.
REST의 단점
- 표준이 존재하지 않는다.
- 사용할 수 있는 메소드가 4가지 밖에 없다.
- 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 값이 왠지 더 어렵게 느껴진다.
- 구형 브라우저가 아직 제대로 지원해주지 못하는 부분이 존재한다.
REST API ?
API(Application Programming Interface) 란
데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 하는 것
REST API의 특징
- 사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지복수 및 운용을 편리하게 할 수 있다.
- REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있다.
- 즉, REST API를 제작하면 델파이 클라이언트 뿐 아니라, 자바, C#, 웹 등을 이용해 클라이언트를 제작할 수 있다.
REST API 설계 예시
RESTful 이란?
1. RESTful은 일반적으로 REST라는 아키텍쳐를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다.
( 'REST API'를 제공하는 웹 서비스를 'RESTful' 하다고 할 수 있다. )
2. RESTful은 REST를 REST답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것이 아니다.
(즉, REST 원리를 따르는 시스템은 RESTful 이란 용어로 지칭된다.)
RESTful의 목적
- 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
- RESTful한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컴벤션을 톻한 API의 이해도 및 호환성을 높이는 것이 주 동기이니, 성능이 중요한 상황에서는 굳이 RESTful한 API를 구현할 필요는 없다.
RESTful 하지 못한 경우
- ex1) CRUD 기능을 모두 POST로만 처리하는 API
- ex2) route에 resource, id 외의 정보가 들어가는 경우 ( /students/updateName )
출처 : https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
package.json
1) 정의
package.json은 프로젝트의 정보를 정의하고, 의존하는 패키지 버전 정보를 명시하는 파일입니다.
일반적으로 루트 디렉토리에 위치하고
작성되는 정보를 크게 2개로 나누면 프로젝트 정보, 패키지 정보로 나눌 수 있습니다.
- 프로젝트의 정보 : name, version 영역
- 패키지 버전 정보 : dependencise 또는 devDependencise 영역
2) 프로젝트 정보
package.json 파일은 반드시 name과 version 항목을 포함해야 합니다.
name: 소문자 한 단어로 이루어져야 합니다. 그리고 하이픈( - )과 언더스코어( _ )가 포함될 수 있습니다.
versoin : x.x.x 형식을 따라야 하며, 작성 규칙을 시맨틱 버저닝 이라고 합니다.
3) 패기지 정보
패키지 정보는 dependencies 또는 devDependencies에 작성됩니다.
dependencies와 devDependencies의 차이는 다음과 같습니다.
- "dependencies": 프로덕션 환경에서 응용 프로그램에 필요한 패키지.
- "devDependencies": 로컬 개발 및 테스트에만 필요한 패키지.
패키지와 모듈
1. 패키지
패키지는 package.json 으로 설명되는 파일 또는 디렉토리 입니다.
패키지는 npm 레지스트리에 공개되기 위해 반드시 package.json 파일을 가지고 있어야합니다
2. 모듈
모듈은 node.js의 require() 함수로 로드될 수 있는 node_modules 디렉토리안의 파일 또는 디렉토리입니다.
주의: 모듈은 package.json 파일을 가질 필요가 없습니다. 모든 모듈들이 패키지는 아닙니다.
package.json을 가진 모듈만이 패키지입니다.
(모듈이 패키지 보다 조금 더 큰 개념)
틸트(~) 와 캐럿 (^)
1. 틸트 ( ~ )
해당 패키지의 패치 레벨 변경을 허용하겠다는 의미
~4.30은 >=4.3.0 이상, <4.4.0 미만과 같은 의미입니다.
즉, 4.4.0 미만의 패치 레벨 환경을 허용하겠다는 의미입니다.
"devDependencise": {
"@vue/cli-service": "~4.3.0",
},
2. 캐럿 ( ^ )
해당 패캐지의 마이너, 패치 변경을 허용하겠다는 의미입니다.
~2.6.11 은 >= 2.6.11 이상, < 3.0.0 미만 과 같은 의미입니다.
즉, 3.0.0 미만의 마이너, 패치 변경을 허용하겠다는 의미입니다.
"dependencies": {
"vue": "^2.6.11"
}