API 설계
📍 Domains
Before
User
type User { "id": String! "nickname": String! // 중복체크 해야할 듯? "email": String! // 유효한 이메일인지 && 중복체크 "avatar": String? // 회원가입 할 때는 넣지않고 나중에 edit "birth": String! // "1994-06-16" 형식 "gender": "man" | "woman" "createdAt": String! "updatedAt": String! ... }
Post
type Post { "id": String! "title": String! "user": User! "fromLocation": String! "toLocation": String! "viaLocations": String[]! "periods": 당일 | 1~3일 | 4~7일 | 8~15일 | 15일이상 "likes": Number! "hashtags": String[] "createdAt": String! "updatedAt": String! ... }
Comment
type Comment { "id": String! ... "createdAt": String! "updatedAt": String! }
Tag
type Tag { "id": String! "tag": String! "createdAt": String! "updatedAt": String! }
📍 Actions
User - 로그인
[POST] 유저는 로그인을 할 수 있다. (로그인하면 토큰 발급)
BE
- 이메일이 틀렸을 경우, 비밀번호가 틀렸을 경우 validation → FE는 에러처리할 것
POST /login Request body { "email": String! "password": String! } Response { "user": User "token": String }
User - 회원가입
[POST] 유저는 회원가입 중간에 이메일 중복확인을 해야한다.
POST / Request body { "email": String! } Response { "duplicate": Boolean }
[POST] 유저는 회원가입 중간에 닉네임 중복확인을 해야한다.
POST / Request body { "nickname": String! } Response { "duplicate": Boolean }
[POST] 유저는 회원가입을 할 수 있다.
FE (프론트에서 서버로 보내기전에 1차적으로 방어)
- 이메일 중복확인을 완료하지 않았거나 중복된 이메일이면 회원가입 버튼이 동작하지 않도록 해야함
- 닉네임 중복확인을 완료하지 않았거나 중복된 닉네임이라면 회원가입 버튼이 동작하지 않도록 해야함
- 동일한 비밀번호가 아닐 경우를 고려해야함
BE
- 비밀번호 확인 : 비밀번호, 비밀번호 확인 필드 모두 보내서 백엔드에서 한번 더 검증 → validation 체크 후 에러있으면 에러 리턴
- 중복된 닉네임, 이메일이면 에러리턴
POST /signup Request body { "email": String! "password": String! "passwordCheck": String! "nickname": String! "birth": String! "gender" : "man" | "woman" } Response { // User와 token을 반환할지 or 응답만 OK로 내려줄지? // 에러나면 에러메세지 }
[이거 GET인가요 POST인가요?] 유저는 로그아웃을 할 수 있다.
GET? Request body { } Response { }
[POST] 유저는 본인 정보를 수정할 수 있다. (이거 와이어프레임 보면서 협의 후 결정하는게 좋을듯,,)
POST Request body { ㅇㄴㅁ } Response { ㄹㅇㄹ }
Post
[GET] 전체 Post 인기순으로 불러오기 (메인페이지에서 Posts를 불러오는 기능, limit-pagination 필요할듯??)
GET Response { // 이거 어떻게 불러와야할지 아직 모르겠어요 }
[GET] 전체 Post 최신순으로 불러오기 (메인페이지에서 Posts를 불러오는 기능, limit-pagination 필요할듯??)
GET Response { // 이거 어떻게 불러와야할지 아직 모르겠어요 }
[GET] 전체 Post 불러오기 (메인페이지에서 Posts를 불러오는 기능, limit-pagination 필요할듯??)
GET Response { // 이거 어떻게 불러와야할지 아직 모르겠어요 }
[GET] Post 검색하기 (메인페이지에서 키워드로 Post 검색하는 기능)
GET Response { posts: Post[] }
[GET] user의 Posts 불러오기 (유저페이지에서 필요)
GET Response { posts: Post[] }
[GET]특정 Post 1개 불러오기 (상세게시물 보기)
GET post/{postId} Response { post: Post }
[POST] 새로운 게시물 작성하기 (필요한거 매우 많음)
POST /post Request body { } Response { }
[PUT] 유저는 본인 게시물을 수정할 수 있다.
Request body { } Response { }
[DELETE] 유저는 본인 게시물을 삭제할 수 있다.
Request body { } Response { }
Comment
[GET] user가 단 댓글들 불러오기 (유저페이지에서 필요)
GET Response { comments: Comment[] }
[PUT] 유저는 본인 댓글을 수정할 수 있다.
Request body { } Response { }
[DELETE로 할까요 PUT으로 할까요?] 유저는 본인 댓글을 삭제할 수 있다.
Request body { } Response { }
Bookmark
[GET] user가 북마크한 Posts 불러오기 (유저페이지에서 필요)
GET Response { }