bulletin board API
1.0.0
교육 목적으로 최소 실행 가능한 게시판 REST API를 만듭니다.
모든 태그, 게시물 및 사용자 목록 가져오기
목록에서 검색
사용자 등록
등록된 사용자는 다음을 수행할 수 있습니다.
새 게시물 추가
기존 게시물에 댓글 달기
게시물과 댓글 삭제 및 편집
PHP 8.1+
라라벨 10
작곡가
MySQL
POST
/api/v1/auth/register
등록이름 | 유형 | 데이터 유형 | 설명 |
---|---|---|---|
이름 | 필수의 | 끈 | 이름 |
별명 | 필수의 | 끈 | 사람이 읽을 수 있는 식별자 |
이메일 | 필수의 | 끈 | 이메일 주소 |
비밀번호 | 필수의 | 끈 | 비밀번호 |
비밀번호_확인됨 | 필수의 | 끈 | 비밀번호 확인 |
201
CREATED
{ "access_token", "token_type": "Bearer" }
POST
/api/v1/auth/login
로그인이름 | 유형 | 데이터 유형 | 설명 |
---|---|---|---|
이메일 | 필수의 | 끈 | 이메일 주소 |
비밀번호 | 필수의 | 끈 | 비밀번호 |
200
OK
{ "access_token", "token_type":"Bearer" }
POST
/api/v1/auth/logout
로그아웃열쇠 | 값 |
---|---|
권한 부여 | 무기명 {토큰} |
204
NO CONTENT
GET
/api/v1/profile
인증된 사용자 프로필 가져오기열쇠 | 값 |
---|---|
권한 부여 | 무기명 {토큰} |
200
OK
{ "data": { "user_id", "name", "nickname", "email", "created_at", "updated_at", "posts_count", "comments_count" } }
GET
/api/v1/profile/posts
인증된 사용자의 프로필과 게시물을 가져옵니다.열쇠 | 값 |
---|---|
권한 부여 | 무기명 {토큰} |
이름 | 유형 | 데이터 유형 | 설명 |
---|---|---|---|
페이지당 | 선택 과목 | 정수 | 페이지당 게시물 수 |
페이지 | 선택 과목 | 정수 | 페이지 번호 |
200
OK
{ "data": [ { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug", }, ... ], "comments_count" } ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/profile/comments
인증된 사용자의 프로필 및 댓글을 가져옵니다.열쇠 | 값 |
---|---|
권한 부여 | 무기명 {토큰} |
이름 | 유형 | 데이터 유형 | 설명 |
---|---|---|---|
페이지당 | 선택 과목 | 정수 | 페이지당 댓글 수 |
페이지 | 선택 과목 | 정수 | 페이지 번호 |
200
OK
{ "data": [ { "comment_id", "body", "created_at":, "updated_at", "post_id", "user_id", "user_nickname" }, ... ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/users
모든 사용자 가져오기이름 | 유형 | 데이터 유형 | 설명 |
---|---|---|---|
큐 | 선택 과목 | 끈 | 검색어 |
페이지당 | 선택 과목 | 정수 | 페이지당 사용자 수 |
페이지 | 선택 과목 | 정수 | 페이지 번호 |
200
OK
{ "data": [ { "user_id", "name", "nickname", "email", "created_at", "updated_at", "posts_count", "comments_count" }, ... ], "links": {...}, "meta": {...} }
GET
/api/v1/users/{nickname}
사용자 가져오기200
OK
{ "data": { "user_id", "name", "nickname", "email", "created_at", "updated_at", "posts_count", "comments_count" } }
GET
/api/v1/users/{nickname}/posts
사용자와 그의 게시물 가져오기이름 | 유형 | 데이터 유형 | 설명 |
---|---|---|---|
페이지당 | 선택 과목 | 정수 | 페이지당 게시물 수 |
페이지 | 선택 과목 | 정수 | 페이지 번호 |
200
OK
{ "data": [ { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ], "comments_count" }, ... ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/users/{nickname}/comments
사용자 및 사용자의 의견 가져오기이름 | 유형 | 데이터 유형 | 설명 |
---|---|---|---|
페이지당 | 선택 과목 | 정수 | 페이지당 댓글 수 |
페이지 | 선택 과목 | 정수 | 페이지 번호 |
200
OK
{ "data": [ { "comment_id", "body", "created_at":, "updated_at", "post_id", "user_id", "user_nickname" }, ... ], "links": {...}, "meta": {...}, "user": { "user_id", "name", "nickname", "email", "created_at", "updated_at" } }
GET
/api/v1/tags
모든 태그 가져오기이름 | 유형 | 데이터 유형 | 설명 |
---|---|---|---|
큐 | 선택 과목 | 끈 | 검색어 |
200
OK
{ "data": [ { "tag_id", "name", "slug", "post_count" }, ... ] }
GET
/api/v1/tags/{slug}
태그 및 해당 게시물 가져오기이름 | 유형 | 데이터 유형 | 설명 |
---|---|---|---|
페이지당 | 선택 과목 | 정수 | 페이지당 게시물 수 |
페이지 | 선택 과목 | 정수 | 페이지 번호 |
200
OK
{ "data": [ { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname" }, ], "links": {...}, "meta": {...}, "tag": { "tag_id", "name", "slug" } }
GET
/api/v1/posts
모든 게시물 가져오기이름 | 유형 | 데이터 유형 | 설명 |
---|---|---|---|
큐 | 선택 과목 | 끈 | 검색어 |
페이지당 | 선택 과목 | 정수 | 페이지당 게시물 수 |
페이지 | 선택 과목 | 정수 | 페이지 번호 |
200
OK
{ "data": [ { "post_id, "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ], "comments_count" }, ... ], "links": {...}, "meta": {...} }
GET
/api/v1/posts/{id}
게시물과 댓글 가져오기이름 | 유형 | 데이터 유형 | 설명 |
---|---|---|---|
페이지당 | 선택 과목 | 정수 | 페이지당 댓글 수 |
페이지 | 선택 과목 | 정수 | 페이지 번호 |
200
OK
{ "data": [ { "comment_id", "body", "created_at", "updated_at", "post_id", "user_id", "user_nickname" }, ... ], "links": {...}, "meta": {...}, "post": { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ] } }
POST
/api/v1/posts
새 게시물 추가열쇠 | 값 |
---|---|
권한 부여 | 무기명 {토큰} |
이름 | 유형 | 데이터 유형 | 설명 |
---|---|---|---|
제목 | 선택 과목 | 끈 | 제목 |
가격 | 선택 과목 | 뜨다 | 가격 |
설명 | 선택 과목 | 끈 | 설명 |
태그[ID] | 선택 과목 | 배열[정수] | 태그 ID 배열 |
201
CREATED
{ "data": { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ] }, }
PUT
/api/v1/posts/{id}
게시물 편집열쇠 | 값 |
---|---|
권한 부여 | 무기명 {토큰} |
이름 | 유형 | 데이터 유형 | 설명 |
---|---|---|---|
제목 | 선택 과목 | 끈 | 제목 |
가격 | 선택 과목 | 뜨다 | 가격 |
설명 | 선택 과목 | 끈 | 설명 |
태그[ID] | 선택 과목 | 배열[정수] | 태그 ID 배열 |
200
OK
{ "data": { "post_id", "title", "price", "description", "created_at", "updated_at", "user_id", "user_nickname", "tags": [ { "tag_id", "name", "slug" }, ... ] }, }
DELETE
/api/v1/posts/{id}
게시물 삭제열쇠 | 값 |
---|---|
권한 부여 | 무기명 {토큰} |
204
NO CONTENT
POST
/api/v1/posts/{id}/comments
게시물에 새 댓글 추가열쇠 | 값 |
---|---|
권한 부여 | 무기명 {토큰} |
이름 | 유형 | 데이터 유형 | 설명 |
---|---|---|---|
몸 | 필수의 | 끈 | 댓글 텍스트 |
201
CREATED
{ "data": { "comment_id", "body", "created_at", "updated_at", "post_id", "user_id", "user_nickname", }, }
PUT
/api/v1/comments/{id}
댓글 편집열쇠 | 값 |
---|---|
권한 부여 | 무기명 {토큰} |
이름 | 유형 | 데이터 유형 | 설명 |
---|---|---|---|
몸 | 필수의 | 끈 | 댓글 텍스트 |
200
OK
{ "data": { "comment_id", "body", "created_at", "updated_at", "post_id", "user_id", "user_nickname", } }
DELETE
/api/v1/comments/{id}
댓글 삭제열쇠 | 값 |
---|---|
권한 부여 | 무기명 {토큰} |
204
NO CONTENT
이 저장소를 복제하고 프로젝트 폴더로 이동합니다.
자식 클론 https://github.com/AllaAverina/bulletin-board-APIcd bulletin-board-API
종속성을 설치합니다.
작곡가 설치
MySQL을 시작하고, .env.example 파일에서 데이터베이스 연결을 위한 매개변수를 변경하고 다음을 실행합니다.
.env.example .env 복사
마이그레이션을 실행하려면 다음 명령어를 실행하세요.
PHP 장인 마이그레이션
또는 데이터베이스를 더미 데이터로 채우려는 경우:
PHP 장인 마이그레이션 --seed
웹 서버를 시작합니다.
PHP 장인 서브
브라우저에서 엽니다(예: http://localhost:8000/api/v1/posts)
테스트용 새 데이터베이스를 생성하고 .env.testing 파일에서 연결할 매개변수를 변경한 후 다음을 실행합니다.
PHP 장인 테스트
이 저장소를 복제하고 프로젝트 폴더로 이동합니다.
자식 클론 https://github.com/AllaAverina/bulletin-board-APIcd bulletin-board-API
종속성을 설치합니다.
도커 실행 --rm -u "$(id -u):$(id -g)" -v "$(pwd):/var/www/html" -w /var/www/html laravelsail/php82-composer:최신 작곡가 설치 --ignore-platform-reqs
.env 파일을 만듭니다.
cp.env.docker.examlpe.env
셸 별칭을 만들고 항해를 실행합니다.
별칭 항해='[ -f 항해 ] && sh 항해 || sh 공급업체/bin/sail'sail up -d
마이그레이션을 실행하려면 다음 명령어를 실행하세요.
항해 장인 이주
또는 데이터베이스를 더미 데이터로 채우려는 경우:
항해 장인 마이그레이션 --seed
브라우저에서 엽니다(예: http://localhost/api/v1/posts)
컨테이너를 중지하려면 다음을 사용하세요.
항해 중지
.env.testing 파일을 설정합니다.
cp .env.docker.testing .env.testing
테스트를 실행합니다.
항해 장인 테스트