RESTful API에 대해 이해하고 설명할 수 있습니다.
✅ RESTful URL
- GET /users // 사용자 목록 조회
- GET /users/123 // 특정 사용자 조회
- POST /users // 새 사용자 생성
- PUT /users/123 // 사용자 정보 수정
- DELETE /users/123 // 사용자 삭제
❌ Non-RESTful URL
- GET /getUsers // 동사 사용
- GET /getUserById/123 // 동사 사용
- POST /createUser // 동사 사용
- GET /api.php?action=deleteUser&id=123 // 쿼리 파라미터로 액션 전달
리소스를 식별하는 통합된 방식을 의미한다. (리소스 식별의 모든 방식)
URL과 URN을 포함하는 상위 개념.
예: urn:isbn:0-486-27557-4 (책의 ISBN)
리소스의 위치를 나타내는 주소를 의미한다.
웹에서 주로 사용되는 형식이다.
예: https://api.example.com/users/123
실제 리소스의 접근 방법을 제공한다.
리소스의 영구적이고 유니크한 이름을 지정하는 방식이다.
위치에 독립적이며, 리소스를 옮기더라도 동일하게 식별 가능하다.
"urn:" 접두어로 시작한다.
urn:isbn:0-486-27557-4 (도서 식별)
urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 (UUID)
urn:ietf:rfc:2648 (IETF 문서)
➡️ 실제 웹 개발에서는 URL이 가장 널리 사용되며, URN은 특수한 경우(도서 ISBN, 문서 식별자 등)에 주로 쓰인다.
데이터 유효성 검사
🖥️ javascript
// 데이터 전송 전 유효성 검사
const submitUser = async (userData) => {
if (!userData.email || !userData.name) {
throw new Error('필수 필드가 누락되었습니다');
}
try {
const response = await axios.post('/users', userData);
return response.data;
} catch (error) {
handleError(error);
}
};
에러 처리
🖥️ javascript
const handleError = (error) => {
if (error.response) {
// 서버가 응답한 에러
switch (error.response.status) {
case 400:
alert('잘못된 요청입니다');
break;
case 401:
// 로그인 페이지로 리다이렉트
redirectToLogin();
break;
// ... 기타 에러 처리
}
} else if (error.request) {
// 요청은 보냈지만 응답을 받지 못함
alert('서버와 통신할 수 없습니다');
} else {
// 요청 설정 중 에러 발생
console.error('Error', error.message);
}
};
헤더 설정
🖥️ javascript
// API 요청 시 공통 헤더 설정
axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
axios.defaults.headers.post['Content-Type'] = 'application/json';
1. 자원은 URI로 표현하고, 행위는 HTTP 메서드로 표현
2. 계층 구조를 활용한 리소스 표현
Copy/users/{userId}/posts/{postId}/comments
3. 쿼리 파라미터는 필터링, 정렬, 페이징에 사용
/users?role=admin&sort=name&page=2
3. 응답 데이터 구조화
🖥️ javascript
// 일관된 응답 구조 예시
{
success: true,
data: {
users: [...],
pagination: {
currentPage: 1,
totalPages: 10
}
},
error: null
}