간단한 미니 프로젝트 겸해서 유튜브에서 사용할만한 API를 만들어보려고 합니다.
유튜브 페이지에서는 어떤 페이지가 있을지 정리해 봅니다.
API 종류 | 페이지 | 필요데이터 | response Data | request Data |
회원 | 로그인 | 아이디 비밀번호 로그인버튼 |
x | o 회원 정보 조회 : 로그인 버튼 클릭 -> 입력받은 아이디와 비밀번호 값을 받아 로그인API에 전달 |
회원가입 | 아이디 비밀번호 비밀번호확인 이름 가입버튼 |
x | o : 가입버튼 클릭 -> 입력받은 값들을 회원가입API에 전달 |
|
마이페이지 | 아이디 이름데이터 채널관리버튼 회원탈퇴버튼 |
o : API에서 회원번호에 맞는 회원 정보 전달(아이디, 이름) |
o : URI에 회원번호를 받아 회원조회 API에 전달 |
|
회원탈퇴 | - 마이페이지 하단의 버튼으로 처리 | :URI에 회원번호를 받아 회원 탈퇴 API에 전달 | ||
채널 (한개의 계정에 100개 의 채널 개설 가능) |
채널생성 | 채널명 채널설명 채널 생성 버튼 |
x | o : 채널 생성버튼 클릭 -> 입력받은 채널명과 채널설명값을 받아 채널생성API에 전달 |
채널관리 | 채널명 채널설명 구독자수 채널 생성 버튼 채널수정버튼 채널삭제버튼 |
o : API에서 회원번호에 맞는 전체 채널명을 전달(채널명, 설명, 구독자수) |
o : URI를 통해 회원번호를 채널조회 API에 전달 |
|
채널수정 | 채널명 채널설명 수정완료버튼 |
o :API에서 회원번호에 맞는 회원 정보를 전달(채널명) |
o : URI를 통해 회원번호를 개별 채널 수정 API에 전달 |
|
채널삭제 | - 채널관리 페이지에 채널삭제버튼으로 처리 | x | : URI에 채널번호를 담아 채널삭제 API에 전달 |
API 설계
회원
1) 로그인 - POST /login
- req : body(id, pw)
- res (200) : 메인페이지 출력 or `${name}님 환영합니다`
2) 회원가입 - POST /join
- req :
body(id, pw, name)body (email, pw, name, tel) - res (201) : 로그인페이지 출력 or `${name}님 가입이 완료되었습니다.`
3) 회원(개별) 정보"조회" - GET /users/:num
- req :
params(num)→ body(email) - res (200) : id, name
4) 회원(개별)"탈퇴" - DELETE /users/:num
- req : params(num)
- res (200) : 메인페이지 출력 or `${name}님 감사했습니다.`
채널
1) 채널 "생성" - POST /channels/:channelsTitle
- req : body(title, description, email)
- res (201) : 채널 관리 페이지 or `${title}님 유튜브 채널을 응원합니다.`
- 비고
(23.12.17)채널 생성시에 title과 description 뿐만 아니라 user의 id도 넘겨줘야하는데요. user의 id는 URI에 포함돼서는 안되는 정보중 하나입니다. 그렇다면 body로 데이터를 넘겨주면 되는건가? 싶을텐데요. 보통 user의 id는 JWT라는 토큰을 통하여 header에 숨겨서 전달을 해줍니다. 일단 token을 발행가지 전에 임시로 body로 user의 id를 받아보겠습니다.
2) 채널 "수정" - PUT /channels/:id
- req : params(id), body(title, description,sub_num,video_num)
- res (200) : 성공적으로 수정되었습니다.
3) 채널 "삭제" - DELETE /channels/:id
- req : params(id)
- res (200) : 메인페이지 or `${title}님 그동안 유튜브를 이용해 주셔서 감사합니다.`
4) 전체 채널 "조회" - GET /channels/
- req :
params(id)body(user_id) - res (200) : channel 데이터 전달
- 비고
(23.12.17) 채널 생성과 마찬가지로 body에 user의 id를 담아서 데이터를 받아오기
5) 개별채널 "조회" - GET /channels/:id
- req :
params(channelTitle와, num)body(user_id), params(id) - res (200) : channel/num 데이터 전달
API에 설계를 따른 코드 틀 - 회원
const express = require("express");
const app = express();
const PORT = 8080;
app.use(express.json());
//로그인
app.post("/login", (req, res) => {
const data = req.body;
console.log(data);
res.json({
message: "로그인 POST 확인중"
});
});
//회원가입
app.post("/join", (req, res) => {
const data = req.body;
console.log(data);
res.json({
message: "회원가입 POST 확인중"
});
});
//회원개별조회
app.get("/users/:num", (req, res) => {
let {num} = req.params;
num = parseInt(num);
res.json({
message: "회원정보 조회 GET 확인중"
});
});
//회원개별탈퇴
app.delete("/users/:num", (req, res) => {
let {num} = req.params;
num = parseInt(num);
res.json({
message: "회원탈퇴 DELETE 확인중"
});
});
app.listen(PORT, () => {
console.log(`connected port number ${PORT}`);
});
API에 설계를 따른 코드 틀 - 채널
const express = require("express");
const app = express();
const PORT = 8080;
app.use(express.json());
app.listen(PORT, () => {
console.log(`connected port number ${PORT}`);
});
let db = new Map();
let idx = 1;
app
.route('/channels/:user')
.post((req, res) => {
//채널 생성
const {user} = req.params;
const data = req.body;
res.status(201).json({
message: "채널 생성 확인중"
});
})
.get((req, res) => {
// 유저의 전체 채널 조회
const { user } = req.params;
res.status(200).json({
message: "채널 전체 조회 확인중"
});
});
app
.route("/channels/:num")
.put((req, res) => {
// 채널 개별 수정
let { num } = req.params;
num = parseInt(num);
res.status(200).json({
message: "채널 수정 확인중"
});
})
.delete((req, res) => {
//채널 개별 삭제
let { num } = req.params;
num = parseInt(num);
res.status(200).json({
message: "채널 삭제 확인중"
});
});
app.get("/channels/:user/:num", (req, res) => {
// 유저의 개별 채널 조회
const { user, num } = req.params;
res.status(200).json({
message: "채널 개별 조회 확인중"
});
});
'프로젝트 > 1.youtube-project' 카테고리의 다른 글
[실전]미니 프로젝트 - 로그인 (0) | 2023.12.14 |
---|---|
[실전]미니 프로젝트 - 회원 개별 "탈퇴" (0) | 2023.12.14 |
[실전]미니 프로젝트 - 회원 개별 "조회" (0) | 2023.12.14 |
[실전]미니 프로젝트 - 회원가입 (0) | 2023.12.14 |
프로젝트 시작 - youtube API project (0) | 2023.12.13 |