이 문서는 Agree 프로젝트에서 사용하는 API 엔드포인트와 데이터 구조를 설명합니다.
API의 기본 URL은 환경 변수 NEXT_PUBLIC_API_URL로 설정됩니다.
대부분의 API 엔드포인트는 Bearer 토큰 인증을 사용합니다. 토큰은 Authorization 헤더에 포함됩니다:
Authorization: Bearer <access_token>
GET /api/posts?category={category}&page={page}&size={size}
Query Parameters:
category(string, optional): 카테고리 필터 (사회, 정책, 경제, 연애·결혼)page(number, optional): 페이지 번호 (기본값: 0)size(number, optional): 페이지 크기 (기본값: 10)
Response:
{
content: Post[];
number: number;
size: number;
totalElements: number;
totalPages: number;
last: boolean;
}GET /api/posts/{postPk}
Path Parameters:
postPk(number): 게시글 ID
Response:
{
postPk: number;
title: string;
agree: boolean;
disagree: boolean;
agreeRate: number;
disagreeRate: number;
agreeCount: number;
disagreeCount: number;
participated: boolean;
totalCount: number;
hashtags: string[];
}POST /api/posts
Request Body:
{
category: string;
title: string;
agree: string;
disagree: string;
newsLink: string;
hashtags: string[];
}POST /api/posts/vote?postPk={postPk}&opinion={opinion}
Query Parameters:
postPk(number): 게시글 IDopinion(string): 투표 의견 ("AGREE" | "DISAGREE")
Response:
{
isSuccess: boolean;
}GET /api/comment?postPk={postPk}&option={option}
Query Parameters:
postPk(number): 게시글 IDoption(string): 의견 필터 ("AGREE" | "DISAGREE")
Response:
{
result: {
list: CommentItem[];
}
}POST /api/posts/{postPk}/comment
Path Parameters:
postPk(number): 게시글 ID
Request Body:
{
content: string;
}Response:
{
isSuccess: boolean;
}POST /api/auth/login
Request Body:
{
userId: string;
password: string;
}Response:
{
accessToken: string;
refreshToken: string;
}POST /api/auth/join
Request Body:
{
userId: string;
password: string;
nickname: string;
}interface Post {
postPk: number;
title: string;
agree: boolean;
disagree: boolean;
agreeRate: number;
disagreeRate: number;
agreeCount: number;
disagreeCount: number;
participated: boolean;
totalCount: number;
hashtags: string[];
category: string;
createdAt: string;
}interface CommentItem {
commentPk: number;
userId: string;
content: string;
likes: number;
}API는 표준 HTTP 상태 코드를 사용합니다:
200 OK: 요청 성공400 Bad Request: 잘못된 요청401 Unauthorized: 인증 필요404 Not Found: 리소스를 찾을 수 없음500 Internal Server Error: 서버 오류
에러 응답 형식:
{
message: string;
error?: any;
}