API for recipe management, allowing creation, reading, updating, and deletion (CRUD).
🚀 Technologies: Laravel, Pest, SQLite, Sanctum
- Installed Web Server (e.g., Laravel Herd);
- PHP >= 8.2;
- Laravel >= 12.0;
- Installed SQLite;
- Postman (optional, for testing requests).
git clone https://github.com/luizfelipelopes/recepies-api.git
cd recipies-api
composer install
php artisan serveCreate a .env file from the .env.example available in the repository.
- Method:
POST - URL:
/api/V1/recipies - Body:
{ "title": "Strawberry Soufflé", "image": null, "ingredients": "Quos dicta earum optio ut eos qui. Dolore tenetur perferendis ex unde. Aspernatur voluptatem cum rerum laboriosam.", "instructions": "Atque saepe sint non sunt ut natus. Incidunt et sint deserunt non culpa numquam. Laudantium aut quidem sed ut praesentium et rerum.", "category": "breakfast" } - Response:
{ "id": "12345", "title": "Strawberry Soufflé", "image": null, "ingredients": "Quos dicta earum optio ut eos qui. Dolore tenetur perferendis ex unde. Aspernatur voluptatem cum rerum laboriosam.", "instructions": "Atque saepe sint non sunt ut natus. Incidunt et sint deserunt non culpa numquam. Laudantium aut quidem sed ut praesentium et rerum.", "category": "breakfast" }
- Method:
PUT - URL:
/api/V1/recipies/12345 - Body:
{ "title": "Strawberry Soufflé", "image": null, "ingredients": "Quos dicta earum optio ut eos qui. Dolore tenetur perferendis ex unde. Aspernatur voluptatem cum rerum laboriosam.", "instructions": "Atque saepe sint non sunt ut natus. Incidunt et sint deserunt non culpa numquam. Laudantium aut quidem sed ut praesentium et rerum.", "category": "breakfast" } - Response:
{ "id": "12345", "title": "Strawberry Soufflé", "image": null, "ingredients": "Quos dicta earum optio ut eos qui. Dolore tenetur perferendis ex unde. Aspernatur voluptatem cum rerum laboriosam.", "instructions": "Atque saepe sint non sunt ut natus. Incidunt et sint deserunt non culpa numquam. Laudantium aut quidem sed ut praesentium et rerum.", "category": "breakfast" }
- Method:
PATCH - URL:
/api/V1/recipies/12345 - Body:
{ "title": "Avocado Soufflé" } - Response:
{ "id": "12345", "title": "Avocado Soufflé", "image": null, "ingredients": "Quos dicta earum optio ut eos qui. Dolore tenetur perferendis ex unde. Aspernatur voluptatem cum rerum laboriosam.", "instructions": "Atque saepe sint non sunt ut natus. Incidunt et sint deserunt non culpa numquam. Laudantium aut quidem sed ut praesentium et rerum.", "category": "breakfast" }
- Method:
GET - URL:
/api/V1/recipies - Response:
{ "data": [ { "id": 1, "title": "Avocado Soufflé", "image": null, "ingredients": "Quos dicta earum optio ut eos qui. Dolore tenetur perferendis ex unde. Aspernatur voluptatem cum rerum laboriosam.", "instructions": "Atque saepe sint non sunt ut natus. Incidunt et sint deserunt non culpa numquam. Laudantium aut quidem sed ut praesentium et rerum.", "category": "breakfast" }, { "id": 2, "title": "Strawberry Soufflé", "image": "https://via.placeholder.com/640x480.png/001155?text=ipsam", "ingredients": "Maiores optio cupiditate qui. Sequi provident deserunt ipsa harum. Qui modi dolorum et sapiente. Non reprehenderit ea molestiae laudantium deserunt.", "instructions": "Natus aut et omnis minus mollitia sit. Pariatur doloremque a nemo. Officiis ut nobis culpa consequatur maiores.", "category": "lunch" }, { "id": 3, "title": "Mr.", "image": null, "ingredients": "In sit illo distinctio quia omnis ducimus. Voluptatem quas deserunt voluptatem placeat itaque. Architecto temporibus autem cupiditate officiis adipisci itaque.", "instructions": "Nisi eligendi numquam officiis nihil qui. Minima fugit illo omnis quisquam commodi commodi in. Quia quod omnis maiores cum quis. Dolores eos quo qui rerum ipsum ut alias.", "category": "lunch" }, { "id": 4, "title": "Miss", "image": "https://via.placeholder.com/640x480.png/0088aa?text=quae", "ingredients": "Mollitia sequi aspernatur sit dignissimos quaerat. Est ut eveniet laudantium nesciunt placeat facere.", "instructions": "Dolores a inventore nisi. Quo cupiditate vitae dicta tenetur. Quam vero recusandae eos minima magni nihil.", "category": "lunch" }, { "id": 5, "title": "Dr.", "image": null, "ingredients": "Vero eum eligendi doloribus totam omnis eos. Necessitatibus itaque reprehenderit unde quae. Nam aut ad fuga rerum. Odit voluptatum omnis molestiae eius blanditiis velit non qui.", "instructions": "Cum ullam et perferendis est. Officiis provident molestiae maxime aut quos. Neque amet laboriosam illo.", "category": "dinner" }, { "id": 6, "title": "Dr.", "image": null, "ingredients": "Vel assumenda magnam maiores illo. Et aperiam repellendus nisi ut voluptates dolores beatae accusamus. Vero ratione itaque voluptatibus quia velit.", "instructions": "Minus dignissimos enim sed rerum ea. Perspiciatis unde aperiam velit aliquid sit. Sunt cupiditate maxime velit sit magnam recusandae nihil. Architecto culpa incidunt magni quas facilis.", "category": "breakfast" }, { "id": 7, "title": "Mr.", "image": null, "ingredients": "Rerum ea et sunt accusamus qui. Dolorem minus assumenda id tenetur est deserunt. Quia dolorem assumenda itaque ut.", "instructions": "Sed quae dolor omnis. Iusto delectus necessitatibus error dolor voluptatum soluta. Consectetur molestiae beatae nobis.", "category": "dinner" }, { "id": 8, "title": "Dr.", "image": "https://via.placeholder.com/640x480.png/00ff99?text=aliquam", "ingredients": "Perferendis pariatur deserunt id et saepe. Optio unde explicabo qui. Ut voluptatem natus et iure necessitatibus optio sed mollitia. Sunt repudiandae aspernatur aliquid aut eius eos.", "instructions": "A blanditiis laborum dolorem assumenda iure iste. Id voluptas ut sit aliquid inventore molestias. Optio impedit accusamus magni amet omnis quae mollitia.", "category": "breakfast" }, { "id": 9, "title": "Dr.", "image": null, "ingredients": "Enim in cupiditate dignissimos hic. Aliquid eos quaerat repellendus fugit voluptas quo. Sit qui et laboriosam enim dolores qui.", "instructions": "Odit hic aut recusandae quis laudantium. Impedit laudantium necessitatibus dignissimos quaerat autem voluptatibus dolor. Numquam repellat eveniet temporibus voluptatum explicabo optio.", "category": "breakfast" }, { "id": 11, "title": "Prof.", "image": null, "ingredients": "Quos dicta earum optio ut eos qui. Dolore tenetur perferendis ex unde. Aspernatur voluptatem cum rerum laboriosam.", "instructions": "Atque saepe sint non sunt ut natus. Incidunt et sint deserunt non culpa numquam. Laudantium aut quidem sed ut praesentium et rerum.", "category": "breakfast" } ], "links": { "first": "http://localhost:8000/api/V1/recipies?page=1", "last": "http://localhost:8000/api/V1/recipies?page=1", "prev": null, "next": null }, "meta": { "current_page": 1, "from": 1, "last_page": 1, "links": [ { "url": null, "label": "« Previous", "active": false }, { "url": "http://localhost:8000/api/V1/recipies?page=1", "label": "1", "active": true }, { "url": null, "label": "Next »", "active": false } ], "path": "http://localhost:8000/api/V1/recipies", "per_page": 10, "to": 10, "total": 10 } }
- Method:
GET - URL:
/api/V1/recipies/12345 - Response:
{ "id": 12345, "title": "Avocado Soufflé", "image": null, "ingredients": "Quos dicta earum optio ut eos qui. Dolore tenetur perferendis ex unde. Aspernatur voluptatem cum rerum laboriosam.", "instructions": "Atque saepe sint non sunt ut natus. Incidunt et sint deserunt non culpa numquam. Laudantium aut quidem sed ut praesentium et rerum.", "category": "breakfast" }
To access protected routes, obtain a token from: /api/V1/recipies/setup
{
"admin": "1|uwTBpPHoq0RENh7BsmvaAD3ALzFXKJ2ltFTYnkpBff40590d",
"crud": "2|CYOpGDQS3zNPAc2ImFqSv6M9STLzMEbHExVd0Fgm3ea4a6e5",
"basic": "3|dB8sBNKBOa2f0MdREDpMSxDoUTdJnYHoU9JJbNlv04e85fe4"
}- admin: Full access to all functionalities
- crud: Access to create, update, and delete functionalities
- basic: Read-only access to recipes list and details
Use the token in the request header:
Authorization: Bearer SEU_TOKEN_AQUI200 OK– Request successful201 Created– Resource successfully created400 Bad Request– Invalid request401 Unauthorized– Token not provided or invalid404 Not Found– Resource not found500 Internal Server Error– Unexpected server error
To run the tests:
php artisan test