Uniwersalny kontroler REST API napisany w PHP, zgodny z zasadami SOLID. Obsługuje podstawowe operacje CRUD (Create, Read, Update, Delete) dla zamówień.
- PHP 7.4 lub nowszy
- Composer
- XAMPP lub inny serwer Apache/Nginx z obsługą PHP
- PHP 7.4+ - Język programowania
- PSR-4 - Standard autoloadingu klas
- Composer - Menedżer zależności dla PHP
- PHPUnit 9.x - Framework do testów jednostkowych
- SOLID Principles - Zasady projektowania obiektowego
- Single Responsibility Principle (SRP)
- Open/Closed Principle (OCP)
- Liskov Substitution Principle (LSP)
- Interface Segregation Principle (ISP)
- Dependency Inversion Principle (DIP)
- Dependency Injection - Wstrzykiwanie zależności
- Repository Pattern - Abstrakcja warstwy danych przez interfejsy
- REST API - Architektura API oparta na protokole HTTP
- JSON - Format wymiany danych
- Apache mod_rewrite - Przekierowanie URL-i do routera
- HTTP Methods - GET, POST, PUT, DELETE, PATCH
- MVC Pattern - Separacja logiki (Controller, Service)
- Router - Obsługa routingu żądań HTTP
- Locale Manager - Zarządzanie tłumaczeniami (i18n)
- Sklonuj repozytorium lub pobierz pliki projektu.
- Przejdź do katalogu projektu:
cd /path/to/api - Zainstaluj zależności za pomocą Composera:
composer install
Projekt zawiera kompletne testy jednostkowe napisane z użyciem PHPUnit.
Aby uruchomić testy:
./vendor/bin/phpunit
lub jeśli PHPUnit jest zainstalowany globalnie:
phpunit
Wszystkie testy powinny przejść pomyślnie, wyświetlając komunikat OK.
Aby przetestować API, musisz uruchomić serwer PHP. W środowisku XAMPP:
- Umieść katalog
apiw folderzehtdocsXAMPP (np.C:\Xampp\htdocs\api). - Uruchom Apache i MySQL w panelu kontrolnym XAMPP.
API obsługuje następujące endpointy dla zamówień:
- GET /api/orders - Pobierz wszystkie zamówienia
- GET /api/orders/{id} - Pobierz zamówienie o podanym ID
- POST /api/orders - Utwórz nowe zamówienie
- PUT /api/orders/{id} - Zaktualizuj zamówienie o podanym ID
- DELETE /api/orders/{id} - Usuń zamówienie o podanym ID
- Metoda: GET
- URL:
http://localhost/api/orders - Headers: Content-Type: application/json
- Body: (puste)
Oczekiwana odpowiedź (200 OK):
{
"data": [
{
"id": 1,
"customer_email": "example@example.com"
}
],
"count": 1
}- Metoda: POST
- URL:
http://localhost/api/orders - Headers: Content-Type: application/json
- Body (raw JSON):
{
"customer_email": "test@example.com"
}Oczekiwana odpowiedź (201 Created):
{
"message": "Zamówienie utworzone pomyślnie.",
"data": {
"id": 1,
"customer_email": "test@example.com"
}
}- Metoda: GET
- URL:
http://localhost/api/orders/1 - Headers: Content-Type: application/json
- Body: (puste)
Oczekiwana odpowiedź (200 OK):
{
"data": {
"id": 1,
"customer_email": "test@example.com"
}
}- Metoda: PUT
- URL:
http://localhost/api/orders/1 - Headers: Content-Type: application/json
- Body (raw JSON):
{
"customer_email": "updated@example.com"
}Oczekiwana odpowiedź (200 OK):
{
"message": "Zamówienie zaktualizowane pomyślnie."
}- Metoda: DELETE
- URL:
http://localhost/api/orders/1 - Headers: Content-Type: application/json
- Body: (puste)
Oczekiwana odpowiedź (204 No Content): (pusta odpowiedź)
API zwraca odpowiednie kody błędów HTTP wraz z komunikatami w języku polskim:
- 400 Bad Request: Brak wymaganych pól lub nieprawidłowy JSON
- 404 Not Found: Zamówienie nie zostało znalezione
- 405 Method Not Allowed: Niedozwolona metoda HTTP
Przykład błędu:
{
"error": "Brak wymaganego pola customer_email."
}- W obecnym stanie API używa mocków dla warstwy serwisowej. Aby podłączyć rzeczywistą bazę danych, należy zaimplementować klasę
UniversalServiceimplementującą interfejsUniversalServiceContract. - Tłumaczenia są ładowane z pliku
resources/lang/PL.json. - Kod jest zgodny z PSR-4 autoloadingiem.