API ejemplo general

Crear un model para Student y una vez creado especificar $table y $fillable:
php artisan make:model Student

Crea también la migration para ese model:
php artisan make:migration create_students_table
Y en esa migration:
$table->string("nombre_completo");
$table->integer("anno");

php artisan migrate
desde el phpmyadmin mete algunos datos de pruebas en esa tabla creada

Crear un resource de respuesta:
php artisan make:resource StudentResource

Y en ese resource en app\Http\Resources\StudentResource.php cambiar la función toArray:
public function toArray($request)
{
// return parent::toArray($request);
return [
'id' => $this->id,
'firstname' => $this->firstname,
'lastname' => $this->lastname,
'email' => $this->email,
'password' => $this->password,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at
];
}

Crear el controllador de la API:
php artisan make:controller APIController

en APIController.php:
...
use App\Http\Resources\StudentResource;
...
public function store(Request $request) {
        $student = Student::create($request->all());
        return new StudentResource($student);
    }

    public function show() {
        $students = Student::all();
        return StudentResource::collection($students);
    }

    public function showbyid($id) {
        $student = Student::find($id);
        if ($student) {
            return new StudentResource($student);
        }
        else {
            return response()->json([
                "Error"=> "No existe registro con el id:".$id
            ],404);
        }
    }

    public function update(Request $request, $id) {
        $student = Student::find($id);
        if ($student) {
            $student->firstname = $request->firstname;
            $student->lastname = $request->lastname;
            $student->email = $request->email;
            $student->password = $request->password;
            $student->save();
            return new StudentResource($student);
        }
        else {
            return response()->json([
                "Error"=> "No existe registro con el id:".$id
            ],404);
        }
    }

    public function delete($id) {
        $student = Student::find($id);
        if ($student) {
            $student->delete();
            return new StudentResource($student);
        }
        else {
            return response()->json([
                "Error"=> "No existe registro con el id:".$id
            ],404);
        }
    }

En routes/api.php:
Route::post('/student', 'APIController@store');
Route::get('/student_get', 'APIController@show');
Route::get('/student_get/{id}', 'APIController@showbyid');
Route::put('/student_update/{id}', 'APIController@update');
Route::delete('/student_delete/{id}', 'APIController@delete');

Y ya desde el postman puedes hacer pruebas (antes tienes q arrancar el servidor con php artisan serve).

Si queremos más seguridad que solo usuarios registrados puedan atacar esa API entonces en la tabla Users añadir el campo api_token (hacerlo con migration),
rellenar ese campo con la clave que quieras asignar a cada usuario (por ejemplo: 9OVJZ1o4Hi)

Y en routes/api.php se pondría:
Route::middleware('auth:api')->get('/student_get', 'APIController@show');

Y para llamarlo desde el postman:
http://127.0.0.1:8000/api/student_get?api_token=9OVJZ1o4Hi
Y para chequearlo en el show de APIController.php
public function show(Request $request) {
   // dd($request->api_token);
   $userAux = User::where('api_token',$request->api_token)->get();

   if (count($userAux)>0) {
     $students = Student::all();
     return StudentResource::collection($students);
   }
   else {
     return "Clave de acceso incorrecta";
   }
}

No hay comentarios:

Publicar un comentario