Posted on: January 29, 2020 12:18 PM
Posted by: Renato
Views: 3490
Pré-requisitos
- PHP 7.1 ou superior
- Compositor
- MySql
- Laravel 5.6 ou superior
- Carteiro
Para acompanhar este tutorial, você deve ter um entendimento básico da linguagem PHP. É necessário conhecimento básico da estrutura do Laravel.
Entendendo nossa aplicação
Você criará uma API CRUD. CRUD significa criar, ler, atualizar e excluir. Nossa API terá os seguintes pontos de extremidade:
GET /api/students
retornará todos os alunos e aceitará GET
solicitações.
GET /api/students/{id}
retornará um registro de estudante fazendo referência a ele id
e aceitará GET
solicitações.
POST /api/students
criará um novo registro do aluno e aceitará POST
solicitações.
PUT /api/students/{id}
atualizará um registro de aluno existente fazendo referência a ele id
e aceitará PUT
solicitações.
DELETE /api/students/{id}
excluirá um registro do aluno fazendo referência a ele id
e aceitará DELETE
solicitações.
O registro do aluno conterá apenas name
e course
como detalhes. Quando terminar de desenvolver esses pontos de extremidade, você os usará para desenvolver um aplicativo real de registros de alunos que fará uso da API.
Configurar o aplicativo Laravel
Para começar, você precisa criar um aplicativo Laravel. Para fazer isso, você deve executar o seguinte comando no seu terminal:
aravel new api-project
Next, change your current directory to the root folder of the project:
$ cd api-project
Next, start up the Laravel server if it’s not already running:
$ php artisan serve
You will be able to visit your application on https://localhost:8000
Em seguida, crie um novo banco de dados para seu aplicativo executando:
$ mysql -uroot -p<br>
Você será solicitado a digitar sua senha do MySQL se tiver algum conjunto ao se autenticar no MySQL. Execute o seguinte para criar um novo banco de dados chamado api-project:
CREATE DATABASE `api-project`;
Podemos continuar criando um modelo junto com uma migração. Para fazer isso, você deve executar:
<br>$ php artisan make:model Student -m
Um novo arquivo chamado Student.php será criado no diretório do aplicativo.
NOTA: Você precisará editar o arquivo para especificar a tabela do banco de dados com a qual gostaríamos de interagir e os campos que podem ser gravados:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model { protected $table = 'students'; protected $fillable = ['name', 'course']; }
Além disso, um arquivo de migração será criado no diretório banco de dados / migrações para gerar nossa tabela. Você precisará modificar o arquivo de migração para criar uma coluna para o nome e o curso que aceitará valores de sequência.
database/migrations
... public function up() { Schema::create('students', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('course'); $table->timestamps(); }); } ...
Em seguida, você pode abrir a pasta do projeto no seu editor de texto preferido e modificar o arquivo .env para inserir as credenciais apropriadas do banco de dados. Isso permitirá que o aplicativo se conecte corretamente ao banco de dados criado recentemente:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=<your-database-name> DB_USERNAME=<your-database-username> DB_PASSWORD=<your-database-password>
Em seguida, você executará sua migração usando o seguinte comando:
$ php artisan migrate
Setup the Routes
Agora que temos o básico do aplicativo configurado, podemos criar um controlador que conterá os métodos para nossa API executando:
$ php artisan make:controller ApiController <br>
Você encontrará um novo arquivo chamado ApiController.php no diretório app \ http \ controllers. Em seguida, podemos adicionar os seguintes métodos: "ApiController.php
in the app\http\controllers
".
... class ApiController extends Controller { public function getAllStudents() { // logic to get all students goes here } public function createStudent(Request $request) { // logic to create a student record goes here } public function getStudent($id) { // logic to get a student record goes here } public function updateStudent(Request $request, $id) { // logic to update a student record goes here } public function deleteStudent ($id) { // logic to delete a student record goes here } }
Prossiga para o diretório de rotas, abra o arquivo api.php e crie os terminais que farão referência aos métodos criados anteriormente no ApiController.
... Route::get('students', 'ApiController@getAllStudents'); Route::get('students/{id}', 'ApiController@getStudent'); Route::post('students, 'ApiController@createStudent'); Route::put('students/{id}', 'ApiController@updateStudent'); Route::delete('students/{id}','ApiController@deleteStudent');
Note: All routes in api.php
are prefixed with /api
by default
Create a Student Record
Localize o método createStudent em nosso ApiController
public function createStudent(Request $request) { // logic to create a student record goes here }
Usaremos a classe de solicitação do Laravel para buscar os dados passados para o terminal. O terminal também espera o nome do tipo string e o curso do tipo string. Quando buscarmos os dados com sucesso, os armazenaremos em nosso banco de dados.
... use App\Student; class ApiController extends Controller { ... public function createStudent(Request $request) { $student = new Student; $student->name = $request->name; $student->course = $request->course; $student->save(); return response()->json([ "message" => "student record created" ], 201); } ... }
O snippet acima importa o modelo de aluno que irá interagir com a tabela de alunos no banco de dados. No método createStudent, instanciamos um novo objeto Request no parâmetro method, seguido por um novo objeto Student. Por fim, para cada $ student-> a solicitação equivalente é buscada e salva. Se a operação for bem-sucedida, uma resposta JSON será enviada de volta ao usuário da API com o registro do aluno de mensagem criado e com o código de resposta 201. Esse método já está vinculado às APIs / estudantes, conforme definido anteriormente em nosso arquivo de rotas localizado em rotas / api.php:
... Route::post('students, 'ApiController@createStudent'); ...
Testing
Antes do teste, verifique se o aplicativo está em execução. Você pode usar o comando inbuilt como mencionado anteriormente:
$ php artisan serve
Ou você pode usar o Valet, que é uma boa ferramenta para criar um passe de proxy para todos os seus aplicativos PHP, fornecendo um domínio * .test ou * .dev para seus aplicativos testarem localmente.
Para testar esse terminal, abra o Postman e faça uma solicitação POST para http: // localhost: 8000 / api / students ou se você usar o Valet http: // <nome da pasta> / api / students. Selecione a opção form-data e transmita os seguintes valores, como mostrado na imagem abaixo:
Funciona se retornar a mensagem de sucesso junto com o código de resposta 201. Agora tente adicionar mais alguns registros para preencher nosso banco de dados para a próxima tarefa.
Return all Student Records
Agora vamos visitar o método getAllStudents em nosso ApiController
public function getAllStudents() { // logic to get all students goes here } class ApiController extends Controller { public function getAllStudents() { $students = Student::get()->toJson(JSON_PRETTY_PRINT); return response($students, 200); } ... }
A consulta eloquente termina com -> toJson (JSON_PRETTY_PRINT); que serializará o retorno de dados do objeto por eloquente em um JSON bem formatado. O JSON é retornado com o código de resposta 200.
Esse método já está vinculado à rota api / students, como definido anteriormente em nosso arquivo de rotas localizado em routes / api.php:
Route::get('students', 'ApiController@getAllStudents');
Return a student record
Abra o Postman e faça uma solicitação GET para o / api / students / {id} terminal {id} pode ser o ID de um registro existente que você possa ter em seu banco de dados.
Update a student record
NOTE: The format for the ternary operator is condition ? true : false
Para testar esse terminal, retorne os detalhes do registro do aluno com o ID 1, fazendo uma solicitação GET para / api / students / 1.
Os seguintes registros foram retornados:
[ { "id": 1, "name": "Michael Okoh", "course": "Computer Science", "created_at": "2019-02-08 14:11:17", "updated_at": "2019-02-08 14:11:17" } ]
Em seguida, alteremos o curso para “Engenharia de software”, fazendo uma solicitação de PUT para api / students / 1. Para fazer uma solicitação PUT, é necessário transmitir uma carga JSON via formulário-dados. Agora, vamos alterar o valor do nome para Trojan Okoh e, claro, o valor para Engenharia de Software.
{ "name": "Trojan Okoh", "course": "Software Engineering" }
Delete a Student Record
Para testar esse terminal, teremos que listar todos os registros que temos atualmente em nosso banco de dados, fazendo uma solicitação GET para o terminal / api / students.
Em seguida, faremos uma solicitação DELETE para estudantes / {id}, em que {id} é o ID do registro que estamos solicitando que seja excluído. Para fins de teste, excluirei o registro com o ID 2.
Conclusion
Agora que você chegou ao final deste artigo, confirme o conteúdo de alguns arquivos importantes.
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Student; class ApiController extends Controller { public function getAllStudents() { $students = Student::get()->toJson(JSON_PRETTY_PRINT); return response($students, 200); } public function createStudent(Request $request) { $student = new Student; $student->name = $request->name; $student->course = $request->course; $student->save(); return response()->json([ "message" => "student record created" ], 201); } public function getStudent($id) { if (Student::where('id', $id)->exists()) { $student = Student::where('id', $id)->get()->toJson(JSON_PRETTY_PRINT); return response($student, 200); } else { return response()->json([ "message" => "Student not found" ], 404); } } public function updateStudent(Request $request, $id) { if (Student::where('id', $id)->exists()) { $student = Student::find($id); $student->name = is_null($request->name) ? $student->name : $request->name; $student->course = is_null($request->course) ? $student->course : $request->course; $student->save(); return response()->json([ "message" => "records updated successfully" ], 200); } else { return response()->json([ "message" => "Student not found" ], 404); } } public function deleteStudent ($id) { if(Student::where('id', $id)->exists()) { $student = Student::find($id); $student->delete(); return response()->json([ "message" => "records deleted" ], 202); } else { return response()->json([ "message" => "Student not found" ], 404); } } }
routes\web.php
<?php use Illuminate\Http\Request; /* |-------------------------------------------------------------------------- | API Routes |-------------------------------------------------------------------------- | | Here is where you can register API routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | is assigned the "api" middleware group. Enjoy building your API! | */ Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); }); Route::get('students', 'ApiController@getAllStudents'); Route::get('students/{id}', 'ApiController@getStudent'); Route::post('students, 'ApiController@createStudent'); Route::put('students/{id}', 'ApiController@updateStudent'); Route::delete('students/{id}', 'ApiController@deleteStudent');
app\Student.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model { protected $table = 'students'; protected $fillable = ['name', 'course']; }
Conseguimos criar uma API CRUD RESTful simples usando o Laravel. Este artigo abordou os conceitos básicos do assunto. Não cobri a validação de solicitação e a segurança da API, o que seria um ótimo próximo passo para você implementar.
Codigo para estudo: https://github.com/lucenarenato/API_RESTful_Laravel_PHP
Fonte: https://www.twilio.com/blog/building-and-consuming-a-restful-api-in-laravel-php
Donate to Site
Renato
Developer