-
Notifications
You must be signed in to change notification settings - Fork 1
Feed API Specification
BangDori edited this page Apr 14, 2024
·
32 revisions
๊ธฐ๋ฅ | ๋ฉ์๋ | URI | ๋น๊ณ |
---|---|---|---|
ํผ๋ ๋ชฉ๋ก ์กฐํ | GET | /feeds | |
ํผ๋ ์์ฑ | POST | /feeds | |
ํผ๋ ์์ธ | GET | /feeds/{feed_id} | |
ํผ๋ ์์ | PUT | /feeds/{feed_id} | |
ํผ๋ ์ญ์ | DELETE | /feeds/{feed_id} | |
ํผ๋ ์ข์์ | POST | /feeds/{feed_id}/like | |
ํผ๋ ์ ๊ณ | POST | /feeds/{feed_id}/report | |
preSignedURL ์์ฒญ | . | . | โ |
S3 ์ด๋ฏธ์ง ์ ๋ก๋ | . | . | โ |
S3 ์ด๋ฏธ์ง ์ ๊ฑฐ | . | . | โ |
- โ : ํ์ธ ์๋ฃ
โ ๏ธ : ๋๊ธฐ ์ํ- โ: ๋ ผ์ ํ์
interface Feed {
id: string | number; // ๐จ ์ง๋ฌธ ๋ฆฌ์คํธ 2
user: {
id: number;
profileImage: string;
name: string;
relationshipStatus: "self" | "following" | "none"; // ๐จ ์ง๋ฌธ ๋ฆฌ์คํธ 3
};
title: string;
content: string;
images: string[];
likeCount: number;
commentCount: number;
is_like: boolean;
is_bookmark: boolean;
updatedAt: string;
}
interface Comment {
id: string | number; // ๐จ ์ง๋ฌธ ๋ฆฌ์คํธ 2
user: {
id: number;
profileImage: string;
name: string;
relationshipStatus: "self" | "following" | "none"; // ๐จ ์ง๋ฌธ ๋ฆฌ์คํธ 3
};
content: string;
updatedAt: string;
}
interface Request {
uri: "/feeds?page=";
method: "GET";
query: {
page: string; // default = 1
};
body: {};
}
interface Response {
code: "2000";
data: {
next: string | null; // ๋ค์ ํ์ด์ง์ ๋ํ ๋งํฌ ex) /feeds?page=2
feeds: Feed[]; // 0๏ธโฃ Feed
};
}
interface Request {
uri: "/feeds";
method: "POST";
body: {
title: string;
content: string;
images: string[];
scope: "public" | "friends" | "private";
};
}
interface Response {
code: "2000";
data: {
// ๐จ ์ง๋ฌธ ๋ฆฌ์คํธ 1
};
}
interface Request {
uri: "/feeds?feedId=";
method: "GET";
query: {
feedId: string | number; // ๐จ ์ง๋ฌธ ๋ฆฌ์คํธ 2
};
body: {};
}
interface Response {
code: "2000";
data: {
feed: Feed; // 0๏ธโฃ Feed
comments: Comment[]; // 0๏ธโฃ Comment
};
}
interface Request {
uri: "/feeds/{feedId}";
method: "PUT";
body: {
title: string;
content: string;
images: string[];
scope: "public" | "friends" | "private"; // ๐จ ์ง๋ฌธ ๋ฆฌ์คํธ 4
};
}
interface Response {
code: "2000";
data: {
// ๐จ ์ง๋ฌธ ๋ฆฌ์คํธ 1
};
}
interface Request {
uri: "/feeds/{feedId}";
method: "DELETE";
body: {};
}
interface Response {
code: "2000";
data: {
// ๐จ ์ง๋ฌธ ๋ฆฌ์คํธ 1
};
}
interface Request {
uri: "/feeds/{feedId}/like";
method: "POST";
body: {};
}
interface Response {
code: "2000";
data: {
// ๐จ ์ง๋ฌธ ๋ฆฌ์คํธ 1
};
}
interface Request {
uri: "/feeds/{feedId}/report";
method: "POST";
body: {
select: string; // ๐จ ์ง๋ฌธ ๋ฆฌ์คํธ 5
content: string; // ๐จ ์ง๋ฌธ ๋ฆฌ์คํธ 6
isBlind: boolean;
};
}
interface Response {
code: "2000";
data: {
// ๐จ ์ง๋ฌธ ๋ฆฌ์คํธ 1
};
}
- ์์ฑ ์๋ฃ, ์ข์์ ์ฑ๊ณต, ์ ๊ณ ์ฑ๊ณต์ ๋ํ ์๋ต ๋ฐ์ดํฐ๋ ๋ฌด์์ผ๋ก ์ค์ ํด์ผ ํ๋์?
- ๊ฒ์๋ฌผ, ์ ์ ์ ๊ฐ์ ๊ณ ์ Id ํ์
ํ์ ํ์ (
string
vsbigint
) - ํ๋ก์ฐ ์ฌ๋ถ์ ์๊ธฐ ๊ฒ์๋ฌผ ์ฌ๋ถ์ ๋ํ ์ฌ๋ถ ์ฒดํน์ ๋ํ ๋ฐฉ๋ฒ
- ๋ณ์ ํ๋๋ก ์ฒดํฌํ๋ ๋ฐฉ๋ฒ
relationshipStatus: 'self' | 'following' | 'none'
- ๋ณ์ ๋๊ฐ๋ก ์ฒดํฌํ๋ ๋ฐฉ๋ฒ
isFollow: boolean
isSelfFeed: boolean
- ๋ณ์ ํ๋๋ก ์ฒดํฌํ๋ ๋ฐฉ๋ฒ
- ๊ณต๊ฐ ๋ฒ์ ๋ณ์ ๋ช ์ด๋ค ๊ฑธ๋ก ์ ์ํ๋๊ฒ ์ข์๊น
- ์ ๊ณ ํ๊ธฐ ์ฌ์ ์ ๋ํ ๋ณ์๋ช ๊ณผ ํ์ ์ ์ด๋ป๊ฒ ์ค์ ํ๋ ๊ฒ์ด ์ข์๊น?
- ์ ๊ณ ํ๊ธฐ ๋ด์ฉ์ ๋ํ ๋ณ์๋ช ์ ๋ญ๋ก ์ค์ ํ๋ ๊ฒ์ด ์ข์๊น?
- user์ id๋ ์ ์๊ฐ์ผ๋ก ์ค์ ๋๋ค. โ
- API ์๋ต ๋ฐ์ดํฐ๋ ์ค๋ค์ดํฌ ์ผ์ด์ค๊ฐ ์๋, ์นด๋ฉ ์ผ์ด์ค๋ก ์ฌ์ฉ๋๋ค. โ