Group Study (2022-2023)/Node.js

[Node.js] 5주차 REST API

알 수 없는 사용자 2022. 11. 13. 22:51

REST API를 알아보기 앞서

REST란 

Representational State Transfer” 의 약자

자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다.

* 자원:  소프트웨어가 관리하는 것들, url  Ex) 문서, 소프트웨어 자체 ,데이터, 그림

상태(정보) 전달 : 데이터가 요청되어지는 시점에서 자원의 상태(정보)를 전달한다.

=>JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적이다.

 

REST API의 작동 

  1. 클라이언트가 서버에 요청을 전송. 클라이언트가 API 문서에 따라 서버가 이해하는 방식으로 요청 형식을 지정.
  2. 서버가 클라이언트를 인증, 해당 요청을 수행할 수 있는 권한이 클라이언트에 있는지 확인.
  3. 서버가 요청을 수신및 내부적 처리.
  4. 서버가 클라이언트에 응답을 반환. (응답에는 요청이 성공했는지 여부를 클라이언트에 알려주는 정보가 포함됨. 응답에는 클라이언트가 요청한 모든 정보도 포함됨.)

REST API의 클라이언트 요청

REST API에는 다음과 같은 주요 구성요소를 포함하는 요청이 필요하다. 

GET(READ)

클라이언트는 GET을 사용하여 서버의 지정된 URL에 있는 리소스에 액세스한다. GET 요청을 캐싱하고 REST API 요청에 파라미터를 넣어 전송하여 전송 전에 데이터를 필터링하도록 서버에 지시할 수 있다.

예시코드

server.get("/api/user", (req, res)=>{
    res.json(users);
});

*앤드포인트의 요청이 들어왔을 때 리스폰으로 json의 users를 반환하는 코드*

만약 특정 아이디(데이터)의 정보를 알고싶다면 

server.get("/api/user/:id", (req, res)=>{
    const user = users.find((u)=>{
        return u.id === req.params.id;
    });
    if(user){
        res.json(user);
    }else{
        res.status(404).json({errorMessage:'User was not Found'});
    }

*404: 리소소를 찾을 수 없음

 

POST(CREATE)

클라이언트는 POST를 사용하여 서버에 데이터를 전송한다. 여기에는 요청과 함께 데이터 표현이 포함된다. 동일한 POST 요청을 여러 번 전송하면 동일한 리소스를 여러 번 생성하는 부작용이 있다.

server.post("/api/user", (req, res) =>{
    users.push(req.body);
    res.json(users);
});

PUT(UPDATE)

클라이언트는 PUT을 사용하여 서버의 기존 리소스를 업데이트함. POST와 달리, REST 웹 서비스에서 동일한 PUT 요청을 여러 번 전송해도 결과는 동일.

    let foundIndex = users.findIndex(u=> u.id === req.params.id);
    if(foundIndex === -1){
        res.status(404).json({errorMessage:'User was not Found'});
    }else{
        users[foundIndex] = {...users[foundIndex], ...req.body}; 
        res.json(users[foundIndex]);
    }
});

DELETE

클라이언트는 DELETE 요청을 사용하여 리소스를 제거. DELETE 요청은 서버 상태를 변경할 수 있다. 하지만 사용자에게 적절한 인증이 없으면 요청은 실패한다.

server.delete('/api/user/:id',  (req, res)=>{
    let foundIndex = users.findIndex(u=> u.id === req.params.id );
    if(foundIndex === -1){
        res.status(404).json({errorMessage:"User was not Found"});
    }else{
        let foundUser = users.splice(foundIndex, 1); 
        res.json(foundUser[0]); 
    }
})

 

REST API의 서버응답

REST 원칙에 따라 서버 응답에 다음과 같은 주요 구성 요소를 포함해야 한다.

상태 표시줄:

상태 표시줄에는 요청 성공 또는 실패를 알리는 3자리 상태 코드가 있다. 예를 들어, 2XX 코드는 성공을 나타내고 4XX 5XX 코드는 오류를 나타낸다. 3XX 코드는 URL 리디렉션을 나타낸다.

ex) 

·        200: 일반 성공 응답

·        201: POST 메서드 성공 응답

·        400: 서버가 처리할 수 없는 잘못된 요청

·        404: 리소스를 찾을 수 없음