-
Notifications
You must be signed in to change notification settings - Fork 0
API 설계 초안
choikangheon edited this page Nov 14, 2023
·
19 revisions
- 백엔드 개발자는 이 문서대로 개발하면 됨
- 혹시 수정사항 있으면 문서에 꼭 반영
- 프론트엔드 개발자는 아직 개발되지 않은 API에 대해 미리 코딩하려 할 때 이 문서를 참고하여 개발하면 됨
Request/Response 모두 json 형식
POST /join
입력 : 유저 정보
{
"email": "[email protected]",
"nickname": "hello",
"imageId": "http://www.naver.com"
}
출력
{ result: "SUCCESS", description: "" }
{ result: "DUPLICATE_EMAIL", description: "이미 가입된 이메일입니다." }
{ result: "ERROR", description: "" } // ERROR는 미처 처리 못한 예외
POST /login
입력: OAuth에 필요한 파라미터들
{
"kakaoAccessToken" : "asdfasdfasdfsadf"
}
출력: 결과, 성공 시 JWT 토큰 추가
{ result: "SUCCESS", description: "" }
{ result: "ERROR", description: "" } // ERROR는 미처 처리 못한 예외
POST /logout
입력: X
출력: 결과
{ result: "SUCCESS" }
{ result: "NOT_LOGINED" }
{ result: "ERROR", description: "" }
GET /teams
입력: X
출력: 모집글 목록
{
result: "SUCCESS",
teams: [
{ teamId: 0, subject: "제목", leader: "김진홍", hashtags: ["a", "b"], lastModified: "yyyy-MM-dd HH:mm:ss" },
{ teamId: 1, subject: "제목", leader: "김진홍", hashtags: ["a", "b"], lastModified: "yyyy-MM-dd HH:mm:ss" }
]
}
{ result: "ERROR", description: "" }
GET /teams/{teamId}
입력: teamId
출력: 모집글 상세 정보
{
result: "SUCCESS",
subject: "제목",
leaderId: 1231
hashtags: ["a", "b"],
roles: [
{ name: "개발자", number: 1 },
{ name: "디자이너", number: 1 }
]
content: "내용"
applyTemplate: [
{ type: "text", question: "안녕하세요?" },
{ type: "image", question: "증명사진" },
{ type: "radiobox", question: "동의?", options: [ "예", "아니오" ] }
]
lastModified: "yyyy-MM-dd HH:mm:ss"
liked: false
}
{ result: "ERROR", description: "" }
POST /team
입력: 제목, 태그, 모집 역할, 설명, 지원 양식
{
{
"subjectType" : "PROJECT",
"subject" : "스프링 프젝 구함",
"types" : ["KOTLIN","JAVA", "MYSQL"],
"roles" : [
{"name" : "프론트엔드", "requiredCount" : 2},
{"name" : "백엔드", "requiredCount" : 3}
],
"content" : "열심히 할 사람 구함",
"teamTemplates" : [
{"type" : "TEXT","question" : "의지를 말해보아라"},
{"type" : "CHECKBOX", "question" : "열심히 할거니", "options" : "네, 아니"}
],
"openChatUrl" : "http://9in-proejct.chat"
}
}
출력: 결과
{
"detail": {
"teamId": 2,
"openChatUrl": "http://9in-proejct.chat",
"content": "열심히 할 사람 구함",
"subject": "스프링 프젝 구함",
"teamTemplates": [
{
"type": "TEXT",
"question": "의지를 말해보아라",
"options": null
},
{
"type": "CHECKBOX",
"question": "열심히 할거니",
"options": "네, 아니"
}
],
"types": [
"KOTLIN",
"JAVA",
"MYSQL"
],
"subjectType": "PROJECT",
"roles": [
{
"name": "프론트엔드",
"requiredCount": 2,
"hiredCount": 0
},
{
"name": "백엔드",
"requiredCount": 3,
"hiredCount": 0
}
]
},
"errorMessage": null
}
GET /team/hashtag
출력 결과 : project 변수는 project에 대한 해시태그 study 변수는 study에 대한 해시태그
{
"detail": {
"project": [
{
"name": "PYTHON",
"value": "Python"
},
{
"name": "SPRING_FRAMEWORK",
"value": "Spring Framework"
},
{
"name": "AWS",
"value": "AWS"
},
{
"name": "IOS",
"value": "iOS"
},
{
"name": "JAVASCRIPT",
"value": "JavaScript"
},
{
"name": "HTML",
"value": "HTML"
},
{
"name": "JAVA",
"value": "Java"
},
{
"name": "C_SHARP",
"value": "C#"
},
{
"name": "C_PLUS_PLUS",
"value": "C++"
},
{
"name": "REACT",
"value": "React.js"
},
{
"name": "NODE",
"value": "Node.js"
},
{
"name": "VUE",
"value": "Vue.js"
},
{
"name": "MYSQL",
"value": "MySQL"
},
{
"name": "KOTLIN",
"value": "Kotlin"
},
{
"name": "ANDROID",
"value": "Android"
},
{
"name": "SQL",
"value": "SQL"
}
],
"study": [
{
"name": "PYTHON",
"value": "Python"
},
{
"name": "SPRING_FRAMEWORK",
"value": "Spring Framework"
},
{
"name": "AWS",
"value": "AWS"
},
{
"name": "IOS",
"value": "iOS"
},
{
"name": "JAVASCRIPT",
"value": "JavaScript"
},
{
"name": "HTML",
"value": "HTML"
},
{
"name": "JAVA",
"value": "Java"
},
{
"name": "C_SHARP",
"value": "C#"
},
{
"name": "C_PLUS_PLUS",
"value": "C++"
},
{
"name": "REACT",
"value": "React.js"
},
{
"name": "NODE",
"value": "Node.js"
},
{
"name": "VUE",
"value": "Vue.js"
},
{
"name": "MYSQL",
"value": "MySQL"
},
{
"name": "KOTLIN",
"value": "Kotlin"
},
{
"name": "ANDROID",
"value": "Android"
},
{
"name": "SQL",
"value": "SQL"
},
{
"name": "ALGORITHM",
"value": "알고리즘"
}
]
},
"errorMessage": null
}
POST /teams/{teamId}/apply
입력: teamId, 모집 역할, 지원 양식
{
teamId: 1
role: 123, // role의 고유번호
answers: [
{ template_id: 1, answer: "네" },
{ template_id: 2, answer: "imgur.com/12345" },
{ template_id: 3, answer: "예" ] }
]
}
출력: 결과
{ result: "SUCCESS", applicationId: 123 }
{ result: "ERROR", description: "" }
GET /hashtags
입력: X
출력: 해시태그 목록
{
result: "SUCCESS",
list: [
{ name: "Backend", count: 999 },
{ name: "iOS", count: 1, subscribing: true }
]
}
{ result: "ERROR", description: "" }
GET /mySubscription/notifications
입력: X
출력: 내 구독 알림 목록
{
result: "SUCCESS",
notifications: [
{ teamId: 0, subject: "제목", subscribingTags: ["a"], lastModified: "yyyy-MM-dd HH:mm:ss" },
{ teamId: 1, subject: "제목", subscribingTags: ["a"], lastModified: "yyyy-MM-dd HH:mm:ss" }
]
}
POST /mySubscription/hashtags
입력: 구독할 해시태그
{ tagToSubscribe: 1 } // 해시태그 고유번호
출력: 결과
{ result: "SUCCESS" }
{ result: "ERROR", description: "" }
GET /myWishTeam
입력: X
출력: 내 찜 모집글 목록
{
result: "SUCCESS",
teams: [
{ teamId: 0, subject: "제목", hashtags: ["a", "b"], lastModified: "yyyy-MM-dd HH:mm:ss" },
{ teamId: 1, subject: "제목", hashtags: ["a", "b"], lastModified: "yyyy-MM-dd HH:mm:ss" }
]
}
{ result: "ERROR", description: "" }
POST /wish
입력: 찜할 모집글 id
{ teamId: 1 } // 팀 고유번호
출력: 결과
{
"detail": {
"wishId": 1,
"teamId": 1,
"accountName": "강헌"
}
}
{ result: "ERROR", description: "" }
GET /chats
입력: X
내용: 대화중인 대화방 목록
{
result: "SUCCESS",
chatRooms: [
{ roomId: 0, relatedTeamId: 123, relatedTeamSubject: "제목", recentMessage: "가장 최근 메시지" },
{ roomId: 1, relatedTeamId: 123, relatedTeamSubject: "제목", recentMessage: "가장 최근 메시지" },
]
}
{ result: "ERROR", description: "" }
GET /chats/{chatId}
입력: chatId
출력: 대화 내용
{
result: "SUCCESS",
chats: [
{ chatId: 0, userId: "id1", message: "메시지", createdAt: "yyyy-MM-dd HH:mm:ss" },
{ chatId: 1, userId: "id2", message: "메시지", createdAt: "yyyy-MM-dd HH:mm:ss" },
]
}
{ result: "ERROR", description: "" }
POST /chats/{chatId}
입력: chatId, 보낼 메시지
{ message: "메시지" }
{ image_url: "imgur.com/12345" }
출력: 결과
{ result: "SUCCESS" }
{ result: "ERROR", description: "" }