*REST API 연습, RESTful??
# 1. 학교와 학생, 성적 정보를 저장하려고 합니다. 데이터베이스를 설계해 보세요.
- 학생은 반드시 하나의 학교에만 소속되어 있습니다.
- 성적은 반드시 학생에게 소속되어 있으며, 한 학생에게 여러개 존재할 수 있습니다.
- 매우 간단하게, 아래의 항목과 관계성만 포함하면 됩니다.
- 학교 : 이름 / 학생 : 이름, 소속학교 / 성적 : 과목명, 점수, 누구의 성적인지
# 2. REST API 규칙에 따라, 아래 API의 HTTP Method와 url을 만들어 보세요.
(예) 학교 상세 조회
GET /schools/1
- 학교 목록 조회
GET /schools
- 학교 생성
POST /schools
{ "id" : 1 ,
{ "name" : "herewego" }
- id가 1인 학교 수정
PATCH /schools/1
{ "name" : "${schoolName}" ,
{ "..." : "..." } ← 수정할 항목만 입력해서 넣기(Patch는 부분수정이니까)
- id가 1인 학교 삭제
DELETE /schools/1
- 학생 목록 조회
GET /students 학교 성적 등에 관계없이 모든 학생 다 불러옴
- id가 1인 학생 한명의 상세정보 조회
GET /students/1
- id가 1인 학생 한명의 성적 목록 조회
GET /students/1/grades
- 특정 과목(수학)의 점수 목록 조회
GET /subjects/1/grades
- id가 1인 학생의 수학 성적 수정
PATCH /students/1?gradeId=1
{ "value":"B" }
라고.. 생각을 했는데 PATCH, PUT이나 DELETE같은 경우에는 대상이 되는 데이터의 id와 같은 정보를
이미 알고 있는 상태에서 진행하게 되기 때문에 이렇게 복잡하게 들어갈 필요 없이,
PATCH grades/${gradeId} 와 같이 진행할 수 있다.
- id가 1인 학생이 전학간 경우(학교 2에서 3으로 전학)
PATCH /students/1
{ "schoolId" : 3 }
# 3. 예상되는 데이터 형태를 작성해보세요.
(예) 학교 생성
POST /schools
{
name: "양이고"
}
- id가 1인 학교 이름 수정 (양이고 -> 루이고)
PATCH /schools/1
{ "name" : "루이고" }
- id가 1인 학교 삭제
DELETE /schools/1
- 1번 학교에 입학한 신입생 생성
POST /students
{ "name" : "chico",
{ "schoolId" : 1 }
- id가 1인 학생이 전학간 경우(학교 2에서 3으로 전학)
PATCH /students/1
{ "schoolId":3 }
- 성적 목록에서 수학 과목만 보고싶은 경우
GET /grades?subjectId=1
→ 필터링은 Parameter를 활용해서 할 수 있다. 보통 리스트 가져올 때 많이...
데이터 설계에 따라 어떤 테이블이 상위개념인지도 달라질 수 있으며,
/subject/1/grades 등과 같이도 쓸 수 있다.
# 4. 학교가 폐교한(삭제하는) 경우, 어떤 문제가 발생할까요?
- 어떻게 해결하는 것이 좋을까요?
1. is_deleted (boolean) 필드를 생성하고,
1. 리스트를 불러올 때 유저에게 해당 필드가 true인 값들은 불러오지 않도록 한다.
2. soft delete한다.
2. = 실제 데이터는 삭제하지 않으면서 내부에서 삭제되었음을 식별할 수 있는 인자를 데이터에 넣어준다.
RESTful 하다 ?
'기초 > HTTP' 카테고리의 다른 글
REST API (보충) (0) | 2021.10.12 |
---|---|
REST API, URL과 URI (0) | 2021.08.05 |
Response (0) | 2021.08.03 |