Skip to content

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 ์ด๋ฏธ์ง€ ์ œ๊ฑฐ . . โŒ
  • โœ…: ํ™•์ธ ์™„๋ฃŒ
  • โš ๏ธ: ๋Œ€๊ธฐ ์ƒํƒœ
  • โŒ: ๋…ผ์˜ ํ•„์š”

0๏ธโƒฃ ํƒ€์ž… ์ •์˜

interface Feed {
  id: string | number; // ๐Ÿšจ ์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ 2

  user: {
    id: string | number; // ๐Ÿšจ ์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ 2
    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: string | number; // ๐Ÿšจ ์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ 2
    profileImage: string;
    name: string;
    relationshipStatus: "self" | "following" | "none"; // ๐Ÿšจ ์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ 3
  };

  content: string;
  updatedAt: string;
}

1๏ธโƒฃ ํ”ผ๋“œ ๋ชฉ๋ก ์กฐํšŒ

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
  };
}

2๏ธโƒฃ ํ”ผ๋“œ ์ž‘์„ฑ

interface Request {
  uri: "/feeds";
  method: "POST";
  body: {
    title: string;
    content: string;
    images: string[];
    scope: "public" | "friends" | "private";
  };
}

interface Response {
  code: "2000";
  data: {
    // ๐Ÿšจ ์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ 1
  };
}

3๏ธโƒฃ ํ”ผ๋“œ ์ƒ์„ธ

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
  };
}

4๏ธโƒฃ ํ”ผ๋“œ ์ˆ˜์ •

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
  };
}

5๏ธโƒฃ ํ”ผ๋“œ ์‚ญ์ œ

interface Request {
  uri: "/feeds/{feedId}";
  method: "DELETE";
  body: {};
}

interface Response {
  code: "2000";
  data: {
    // ๐Ÿšจ ์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ 1
  };
}

6๏ธโƒฃ ํ”ผ๋“œ ์ข‹์•„์š”

interface Request {
  uri: "/feeds/{feedId}/like";
  method: "POST";
  body: {};
}

interface Response {
  code: "2000";
  data: {
    // ๐Ÿšจ ์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ 1
  };
}

7๏ธโƒฃ ํ”ผ๋“œ ์‹ ๊ณ 

interface Request {
  uri: "/feeds/{feedId}/report";
  method: "POST";
  body: {
    select: string; // ๐Ÿšจ ์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ 5
    content: string; // ๐Ÿšจ ์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ 6
    isBlind: boolean;
  };
}

interface Response {
  code: "2000";
  data: {
    // ๐Ÿšจ ์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ 1
  };
}

๐Ÿšจ ์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ

  1. ์ž‘์„ฑ ์™„๋ฃŒ, ์ข‹์•„์š” ์„ฑ๊ณต, ์‹ ๊ณ  ์„ฑ๊ณต์— ๋Œ€ํ•œ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋Š” ๋ฌด์—‡์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•˜๋‚˜์š”?
  2. ๊ฒŒ์‹œ๋ฌผ, ์œ ์ €์™€ ๊ฐ™์€ ๊ณ ์œ  Id ํƒ€์ž… ํ™•์ • ํ•„์š” (string vs bigint)
  3. ํŒ”๋กœ์šฐ ์—ฌ๋ถ€์™€ ์ž๊ธฐ ๊ฒŒ์‹œ๋ฌผ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์—ฌ๋ถ€ ์ฒดํ‚น์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•
    • ๋ณ€์ˆ˜ ํ•˜๋‚˜๋กœ ์ฒดํฌํ•˜๋Š” ๋ฐฉ๋ฒ• relationshipStatus: 'self' | 'following' | 'none'
    • ๋ณ€์ˆ˜ ๋‘๊ฐœ๋กœ ์ฒดํฌํ•˜๋Š” ๋ฐฉ๋ฒ• isFollow: boolean isSelfFeed: boolean
  4. ๊ณต๊ฐœ ๋ฒ”์œ„ ๋ณ€์ˆ˜ ๋ช… ์–ด๋–ค ๊ฑธ๋กœ ์ •์˜ํ•˜๋Š”๊ฒŒ ์ข‹์„๊นŒ
  5. ์‹ ๊ณ ํ•˜๊ธฐ ์‚ฌ์œ ์— ๋Œ€ํ•œ ๋ณ€์ˆ˜๋ช…๊ณผ ํƒ€์ž…์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ?
  6. ์‹ ๊ณ ํ•˜๊ธฐ ๋‚ด์šฉ์— ๋Œ€ํ•œ ๋ณ€์ˆ˜๋ช…์„ ๋ญ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ?

โœ๏ธ ํ”ผ๋“œ๋ฐฑ

  1. user์˜ id๋Š” ์ •์ˆ˜๊ฐ’์œผ๋กœ ์„ค์ •๋œ๋‹ค.
  2. API ์‘๋‹ต ๋ฐ์ดํ„ฐ๋Š” ์Šค๋„ค์ดํฌ ์ผ€์ด์Šค๊ฐ€ ์•„๋‹Œ, ์นด๋ฉœ ์ผ€์ด์Šค๋กœ ์‚ฌ์šฉ๋œ๋‹ค. โœ