Erstellen einer minimal brauchbaren Bulletin-Board-REST-API für Bildungszwecke.
Abrufen von Listen aller Tags, Beiträge und Benutzer
Suche in Listen
Benutzerregistrierung
Ein registrierter Benutzer kann:
Neue Beiträge hinzufügen
Kommentieren Sie bestehende Beiträge
Löschen und bearbeiten Sie Ihre Beiträge und Kommentare
PHP 8.1+
Laravel 10
Komponist
MySQL
POST
/api/v1/auth/register
RegistrierenName | Typ | Datentyp | Beschreibung |
---|---|---|---|
Name | erforderlich | Zeichenfolge | Name |
Spitzname | erforderlich | Zeichenfolge | Für Menschen lesbarer Bezeichner |
erforderlich | Zeichenfolge | E-Mail-Adresse | |
Passwort | erforderlich | Zeichenfolge | Passwort |
passwort_bestätigt | erforderlich | Zeichenfolge | Passwortbestätigung |
201
CREATED
{ "access_token", "token_type": "Bearer" }
POST
/api/v1/auth/login
AnmeldenName | Typ | Datentyp | Beschreibung |
---|---|---|---|
erforderlich | Zeichenfolge | E-Mail-Adresse | |
Passwort | erforderlich | Zeichenfolge | Passwort |
200
OK
{ "access_token", "token_type":"Bearer" }
POST
/api/v1/auth/logout
AbmeldenSchlüssel | Wert |
---|---|
Genehmigung | Inhaber {Token} |
204
NO CONTENT
GET
/api/v1/profile
Authentifiziertes Benutzerprofil abrufenSchlüssel | Wert |
---|---|
Genehmigung | Inhaber {Token} |
200
OK
{ "data": { "user_id", "name", "nickname", "email", "created_at", "updated_at", "posts_count", "comments_count" } }
GET
/api/v1/profile/posts
Rufen Sie das Profil und die Beiträge eines authentifizierten Benutzers abSchlüssel | Wert |
---|---|
Genehmigung | Inhaber {Token} |
Name | Typ | Datentyp | Beschreibung |
---|---|---|---|
pro_seite | optional | int | Anzahl der Beiträge pro Seite |
Seite | optional | int | Seitenzahl |
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
Rufen Sie das Profil und die Kommentare eines authentifizierten Benutzers abSchlüssel | Wert |
---|---|
Genehmigung | Inhaber {Token} |
Name | Typ | Datentyp | Beschreibung |
---|---|---|---|
pro_seite | optional | int | Anzahl der Kommentare pro Seite |
Seite | optional | int | Seitenzahl |
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
Alle Benutzer abrufenName | Typ | Datentyp | Beschreibung |
---|---|---|---|
Q | optional | Zeichenfolge | Suchanfrage |
pro_seite | optional | int | Anzahl der Benutzer pro Seite |
Seite | optional | int | Seitenzahl |
200
OK
{ "data": [ { "user_id", "name", "nickname", "email", "created_at", "updated_at", "posts_count", "comments_count" }, ... ], "links": {...}, "meta": {...} }
GET
/api/v1/users/{nickname}
Benutzer abrufen200
OK
{ "data": { "user_id", "name", "nickname", "email", "created_at", "updated_at", "posts_count", "comments_count" } }
GET
/api/v1/users/{nickname}/posts
Holen Sie sich den Benutzer und seine BeiträgeName | Typ | Datentyp | Beschreibung |
---|---|---|---|
pro_seite | optional | int | Anzahl der Beiträge pro Seite |
Seite | optional | int | Seitenzahl |
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
Holen Sie sich den Benutzer und seine KommentareName | Typ | Datentyp | Beschreibung |
---|---|---|---|
pro_seite | optional | int | Anzahl der Kommentare pro Seite |
Seite | optional | int | Seitenzahl |
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
Alle Tags abrufenName | Typ | Datentyp | Beschreibung |
---|---|---|---|
Q | optional | Zeichenfolge | Suchanfrage |
200
OK
{ "data": [ { "tag_id", "name", "slug", "post_count" }, ... ] }
GET
/api/v1/tags/{slug}
Holen Sie sich ein Tag und seine BeiträgeName | Typ | Datentyp | Beschreibung |
---|---|---|---|
pro_seite | optional | int | Anzahl der Beiträge pro Seite |
Seite | optional | int | Seitenzahl |
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
Alle Beiträge abrufenName | Typ | Datentyp | Beschreibung |
---|---|---|---|
Q | optional | Zeichenfolge | Suchanfrage |
pro_seite | optional | int | Anzahl der Beiträge pro Seite |
Seite | optional | int | Seitenzahl |
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}
Einen Beitrag und seine Kommentare abrufenName | Typ | Datentyp | Beschreibung |
---|---|---|---|
pro_seite | optional | int | Anzahl der Kommentare pro Seite |
Seite | optional | int | Seitenzahl |
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
Neuen Beitrag hinzufügenSchlüssel | Wert |
---|---|
Genehmigung | Inhaber {Token} |
Name | Typ | Datentyp | Beschreibung |
---|---|---|---|
Titel | optional | Zeichenfolge | Titel |
Preis | optional | schweben | Preis |
Beschreibung | optional | Zeichenfolge | Beschreibung |
Tags[id] | optional | array[int] | Array von Tag-IDs |
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}
Schlüssel | Wert |
---|---|
Genehmigung | Inhaber {Token} |
Name | Typ | Datentyp | Beschreibung |
---|---|---|---|
Titel | optional | Zeichenfolge | Titel |
Preis | optional | schweben | Preis |
Beschreibung | optional | Zeichenfolge | Beschreibung |
Tags[id] | optional | array[int] | Array von Tag-IDs |
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}
Einen Beitrag löschenSchlüssel | Wert |
---|---|
Genehmigung | Inhaber {Token} |
204
NO CONTENT
POST
/api/v1/posts/{id}/comments
Einen neuen Kommentar zu einem Beitrag hinzufügenSchlüssel | Wert |
---|---|
Genehmigung | Inhaber {Token} |
Name | Typ | Datentyp | Beschreibung |
---|---|---|---|
Körper | erforderlich | Zeichenfolge | Kommentartext |
201
CREATED
{ "data": { "comment_id", "body", "created_at", "updated_at", "post_id", "user_id", "user_nickname", }, }
PUT
/api/v1/comments/{id}
Kommentar bearbeitenSchlüssel | Wert |
---|---|
Genehmigung | Inhaber {Token} |
Name | Typ | Datentyp | Beschreibung |
---|---|---|---|
Körper | erforderlich | Zeichenfolge | Kommentartext |
200
OK
{ "data": { "comment_id", "body", "created_at", "updated_at", "post_id", "user_id", "user_nickname", } }
DELETE
/api/v1/comments/{id}
Einen Kommentar löschenSchlüssel | Wert |
---|---|
Genehmigung | Inhaber {Token} |
204
NO CONTENT
Klonen Sie dieses Repository und gehen Sie zu Ihrem Projektordner:
Git-Klon https://github.com/AllaAverina/bulletin-board-APIcd bulletin-board-API
Abhängigkeiten installieren:
Composer installieren
Starten Sie MySQL, ändern Sie die Parameter für die Verbindung zur Datenbank in der Datei .env.example und führen Sie Folgendes aus:
kopieren Sie .env.example .env
Führen Sie den Befehl aus, um die Migrationen auszuführen:
PHP-Artist migrieren
Oder wenn Sie die Datenbank mit Dummy-Daten füllen möchten:
php artisan migrate --seed
Starten Sie den Webserver:
PHP-Handwerker dienen
Öffnen Sie in Ihrem Browser beispielsweise http://localhost:8000/api/v1/posts
Erstellen Sie eine neue Datenbank zum Testen, ändern Sie die Parameter für die Verbindung mit ihr in der Datei .env.testing und führen Sie Folgendes aus:
PHP-Artist-Test
Klonen Sie dieses Repository und gehen Sie zu Ihrem Projektordner:
Git-Klon https://github.com/AllaAverina/bulletin-board-APIcd bulletin-board-API
Abhängigkeiten installieren:
Docker run --rm -u "$(id -u):$(id -g)" -v „$(pwd):/var/www/html“ -w /var/www/html laravelsail/php82-composer:latest Composer-Installation --ignore-platform-reqs
Erstellen Sie eine .env-Datei:
cp.env.docker.examlpe.env
Erstellen Sie einen Shell-Alias und führen Sie „sail“ aus:
alias Sail='[ -f Segel ] && sh Segel || sh Vendor/bin/sail'sail up -d
Führen Sie den Befehl aus, um die Migrationen auszuführen:
Segelhandwerker migrieren
Oder wenn Sie die Datenbank mit Dummy-Daten füllen möchten:
Segelhandwerker migrieren --seed
Öffnen Sie in einem Browser, zum Beispiel http://localhost/api/v1/posts
Um Container zu stoppen, verwenden Sie:
Segelstopp
Richten Sie die Datei .env.testing ein:
cp .env.docker.testing .env.testing
Führen Sie die Tests aus:
Segelhandwerkertest