[UMC Server(Spring Boot) 6주차] URL의 설계 & 프로젝트 셋팅

Sujung Shin·2023년 11월 10일
0

지난 주차까지 데이터베이스를 ERD로 설계해보고, 해당 데이터베이스에 맞는 SQL문을 작성해보았다.
이번 주차에서는 API를 큰 틀에서 설계하는 것을 목적으로 한다.

📌 API 설계하기
1. API End point의 설계
2. 요청 데이터, 응답 데이터의 설계

📌 API 명세서란?
프론트 개발자가 API를 사용하기 쉽도록 돕는 문서

🔖📑 API란?


Application Programming Interface(API) 의 약자로,

🌟 Application을 Programming할 때 사용되는 Interface이다.

REST API

REST(Representational State Transfer)의 약자로,
HTTP를 기반으로 하는 web service architecture을 의미하며, HTTP 메서드와 자원을 이용하여 통신을 주고받는 방법을 의미

API Endpoint

REST API에서 API Endpoint는 해당 API를 호출하기 위한 HTTP 메서드, URL을 포함하는 개념

HTTP 메서드

REST 방식으로 통신할 때 필요한 작업을 표시하는 방법

통상적으로 5개의 CRUD(생성, 조회, 갱신, 삭제)에 5개의 메서드가 대응된다.
1. GET : 조회
2. POST : 새로운 자원의 생성+특정 정보를 서버로 넘기고, 그에 대한 처리를 요청하는 것
3. PUT : 전체 갱신
4. PATCH : 일부 갱신
5. DELET : 삭제

RESTful API Endpoint의 설계

  1. URL에 동사가 포함되면 안된다.
  2. URL에서 단어의 구분이 필요한 경우 -(하이픈)을 이용한다.
  3. 자원은 기본적으로 복수형을 이용한다.
  4. 단 하나의 자원을 명시적으로 표현하기 위해서는 /users/id 와 같이 식별 값을 추가로 사용한다.
  5. 자원 간의 연관관계가 있을 경우, 이를 URI에 표현한다.

회원 가입, 로그인 탈퇴

로그인의 주체가 되는 것은 사용자이므로 url상에서 users가 들어간다.
클라이언트가 로그인에 필요한 정보를 서버로 넘겨 로그인에 대한 처리를 요청: POST로 설계 필요

  • 회원 가입(새로운 사용자 생성)
    : POST /users
  • 로그인(특정 정보를 서버로 넘기고, 그에 대한 처리를 요청하는 것)
    : POST /users
    중복된 설계 발생🤯🚨

등 다른 기능인데도 중복된 설계가 있을 수 있으므로

  • 회원 가입 : POST /users/join
  • 로그인: POST /users/login

형식으로 만들어준다.
HTTP 메소드, 필요한 자원에 대한 URI를 합쳐 API Endpoint라고 한다.




👉 리소스 간의 연관관계가 있는 경우

한 명의 사용자(교사)가 여러 개의 교과목을 강의할 수 있을 때,

교사:교과목은 1:N 관계를 가진다.

이때 교과목의 목록을 조회하는 API를 설계한다고 가정해보자.

교과목은 교사와 1:N 관계를 가지므로, 사용자가 오로지 교사만 있다고 가정했을 때,

🔑 /users/subjects

라고 하여 N인 교사가 상위 계층으로, 1인 교과목이 하위 계층으로 와서 계층 관계를 표현할 수 있다.



따라서 특정 교사의 교과목 목록을 보고싶다면:

🔑 /users/id/subjects

처럼 설계하면 된다.




👉 N:M 관계는? (게시글과 해시태그)

게시글과 해시태그가 N:M 관계라고 했을 때,

/articles/hash-tags
/hast-tags/articles

로 설계해야할지 고민이 되기 마련이다.



이 때에는 비즈니스 로직 상 더 중요한 대상을 계층 관계에서 더 앞에 두어 표현한다.

이 경우에는 해시태그는 게시글보다 부수적인 역할을 하기 때문에

🔑 /articles/hash-tags

와 같이 설계하는 것이 올바르다.




세부적인 API 설계

🌟
1. path variable
2. query string
3. request body
4. request header

1. path variable

API의 endpoint는 간략하게 [이런 역할을 하는 API야!] 정도만 알려주는 것이라고 생각하면 된다.




예를 들어 회원 가입을 한다고 했을 때,

POST /users로 Endpoint 설계는 끝이 날 수 있다.

그러나 위의 정보만으로는 부족한 것이 있다.

회원 가입이란, 회원 정보를 새로 저장하는 것이다.

그런데 이때의 저장할 정보가 '무엇'인지를 알 수 없다.

Endpoint 하나만으로는 실제 동작에 필요한 정보를 표현할 수 없다.

그렇기 때문에,

2. query string

조건을

profile
백문이불여일타

0개의 댓글

관련 채용 정보