การสร้าง 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
เพิ่มโพสต์ใหม่สำคัญ | ค่า |
---|---|
การอนุญาต | ผู้ถือ {โทเค็น} |
ชื่อ | พิมพ์ | ชนิดข้อมูล | คำอธิบาย |
---|---|---|---|
ชื่อ | ไม่จำเป็น | เชือก | ชื่อ |
ราคา | ไม่จำเป็น | ลอย | ราคา |
คำอธิบาย | ไม่จำเป็น | เชือก | คำอธิบาย |
แท็ก[รหัส] | ไม่จำเป็น | อาร์เรย์[int] | อาร์เรย์ของรหัสแท็ก |
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}
แก้ไขโพสต์สำคัญ | ค่า |
---|---|
การอนุญาต | ผู้ถือ {โทเค็น} |
ชื่อ | พิมพ์ | ชนิดข้อมูล | คำอธิบาย |
---|---|---|---|
ชื่อ | ไม่จำเป็น | เชือก | ชื่อ |
ราคา | ไม่จำเป็น | ลอย | ราคา |
คำอธิบาย | ไม่จำเป็น | เชือก | คำอธิบาย |
แท็ก[รหัส] | ไม่จำเป็น | อาร์เรย์[int] | อาร์เรย์ของรหัสแท็ก |
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
โคลนที่เก็บนี้และไปที่โฟลเดอร์โปรเจ็กต์ของคุณ:
git clone https://github.com/AllaAverina/bulletin-board-APIcd กระดานข่าว-board-API
ติดตั้งการพึ่งพา:
ติดตั้งผู้แต่ง
เริ่ม MySQL เปลี่ยนพารามิเตอร์สำหรับการเชื่อมต่อกับฐานข้อมูลในไฟล์ .env.example และรัน:
คัดลอก .env.example .env
รันคำสั่งเพื่อรันการย้ายข้อมูล:
php artisan โยกย้าย
หรือถ้าคุณต้องการเติมฐานข้อมูลด้วยข้อมูลจำลอง:
php artisan โยกย้าย --seed
เริ่มเว็บเซิร์ฟเวอร์:
php artisan เสิร์ฟ
เปิดในเบราว์เซอร์ของคุณ เช่น http://localhost:8000/api/v1/posts
สร้างฐานข้อมูลใหม่สำหรับการทดสอบ เปลี่ยนพารามิเตอร์เพื่อเชื่อมต่อกับฐานข้อมูลในไฟล์ .env.testing และรัน:
การทดสอบช่างฝีมือ PHP
โคลนที่เก็บนี้และไปที่โฟลเดอร์โปรเจ็กต์ของคุณ:
git clone https://github.com/AllaAverina/bulletin-board-APIcd กระดานข่าว-board-API
ติดตั้งการพึ่งพา:
นักเทียบท่าวิ่ง --rm -u "$(id -u):$(id -g)" -v "$(pwd):/var/www/html" -w /var/www/html laravelsail/php82-ผู้แต่ง:latest การติดตั้งผู้แต่ง --ignore-platform-reqs
สร้างไฟล์ .env:
cp.env.docker.examlpe.env
สร้างนามแฝงของเชลล์และเรียกใช้การแล่นเรือ:
นามแฝงแล่น = '[ -f แล่นเรือ ] && sh แล่นเรือ || sh vendor/bin/sail'sail up -d
รันคำสั่งเพื่อรันการย้ายข้อมูล:
ช่างฝีมือแล่นเรืออพยพ
หรือถ้าคุณต้องการเติมฐานข้อมูลด้วยข้อมูลจำลอง:
ช่างฝีมือแล่นเรืออพยพ - เมล็ดพันธุ์
เปิดในเบราว์เซอร์ เช่น http://localhost/api/v1/posts
หากต้องการหยุดคอนเทนเนอร์ให้ใช้:
หยุดแล่นเรือ
ตั้งค่าไฟล์ .env.testing:
cp .env.docker.testing .env.การทดสอบ
ทำการทดสอบ:
การทดสอบช่างฝีมือการแล่นเรือ