*REST API 연습, RESTful??

기초/HTTP|2021. 8. 9. 22:55

# 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 하다 ?

레스트풀(RESTful) 또는 간략히 레스트(REST; Representational State Transfer)는
 HTTP를 활용하여 리소스 중심으로 데이터를 연계하는 것을 말한다.

'기초 > HTTP' 카테고리의 다른 글

REST API (보충)  (0) 2021.10.12
REST API, URL과 URI  (0) 2021.08.05
Response  (0) 2021.08.03