0% found this document useful (0 votes)
56 views7 pages

Crear Api Rest Con Laravel 10

The document outlines the steps to create a REST API with Laravel 10. It discusses installing Laravel and Laravel Passport, configuring the database, creating models, migrations, controllers and routes to build out basic CRUD functionality for offers including authentication.

Uploaded by

tutorcfgsi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
56 views7 pages

Crear Api Rest Con Laravel 10

The document outlines the steps to create a REST API with Laravel 10. It discusses installing Laravel and Laravel Passport, configuring the database, creating models, migrations, controllers and routes to build out basic CRUD functionality for offers including authentication.

Uploaded by

tutorcfgsi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

CREAR API REST CON LARAVEL 10

1. Instalamos Laravel 10

composer create-project --prefer-dist laravel/laravel NewAPIRest

2. Entramos en la carpeta “NewAPIRest” y agregamos las dependencias de Laravel


Passport (Laravel Passport es un servidor OAuth2 y un paquete de autenticación que
es simple y sencillo de usar).

composer require laravel/passport --ignore-platform-req=ext-sodium

3. Configuramos la BD en el archivo “.env”

4. Forzamos la migración para crear las tablas en la Base de Datos

php artisan migrate

5. Para agregar el módulo de autenticación, es necesario instalar passport

php artisan passport:install

6. Creamos una tabla “Offer” en las migraciones

php artisan make:migration create_offers_table

modificamos su contenido:

Schema::create('offers', function (Blueprint $table) {


$table->id();
$table->string('name');
$table->text('description');
$table->timestamps();
});

Y volvemos a migrar:
php artisan migrate

Rellenamos la tabla “offers” de la BD con algunos registros


7. Creamos el modelo “app/Models/Offer.php”

<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Offer extends Model


{
use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var array
*/

protected $fillable = [
'name', 'description'
];
}

8. Y creamos las rutas de la API en “routes/api.php”

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

use App\Http\Controllers\API\RegisterController;
use App\Http\Controllers\API\OfferController;

Route::controller(RegisterController::class)->group(function(){
Route::post('register', 'register');
Route::post('login', 'login');
});

Route::middleware('auth:sanctum')->group( function () {
// La siguiente ruta devuelve las ofertas
Route::get('/offers', [OfferController::class, 'index']);
});
9. Creamos los Controladores “app/Http/Controllers/API/BaseController.php”,
“app/Http/Controllers/API/OfferController” y
“app/Http/Controllers/API/RegisterController”

<?php
namespace App\Http\Controllers\API;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller as Controller;

class BaseController extends Controller


{
/**
* success response method.
*
* @return \Illuminate\Http\Response
*/

public function sendResponse($result, $message)


{
$response = [
'success' => true,
'data' => $result,
'message' => $message,
];

return response()->json($response, 200);


}

/**
* return error response.
*
* @return \Illuminate\Http\Response
*/

public function sendError($error, $errorMessages = [], $code = 404)


{
$response = [
'success' => false,
'message' => $error,
];

if(!empty($errorMessages)){
$response['data'] = $errorMessages;
}

return response()->json($response, $code);


}
}
<?php

namespace App\Http\Controllers\API;

use Illuminate\Http\Request;
use App\Http\Controllers\API\BaseController as BaseController;
use App\Models\Offer;
use Validator;
use App\Http\Resources\OfferResource;
use Illuminate\Http\JsonResponse;

class OfferController extends BaseController


{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/

public function index(): JsonResponse


{
$offers = Offer::all();

return $this->sendResponse(OfferResource::collection($offers), 'Offers


retrieved successfully.');
}

/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/

public function store(Request $request): JsonResponse


{
$input = $request->all();

$validator = Validator::make($input, [
'name' => 'required',
'description' => 'required'
]);

if($validator->fails()){
return $this->sendError('Validation Error.', $validator-
>errors());
}

$offer = Offer::create($input);

return $this->sendResponse(new OfferResource($offer), 'Offer created


successfully.');
}

/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id): JsonResponse
{
$offer = Offer::find($id);

if (is_null($offer)) {
return $this->sendError('Offer not found.');
}

return $this->sendResponse(new OfferResource($offer), 'Offer retrieved


successfully.');
}

/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/

public function update(Request $request, Offer $offer): JsonResponse


{
$input = $request->all();

$validator = Validator::make($input, [
'name' => 'required',
'description' => 'required'
]);

if($validator->fails()){
return $this->sendError('Validation Error.', $validator-
>errors());
}

$offer->name = $input['name'];
$offer->description = $input['description'];
$offer->save();

return $this->sendResponse(new OfferResource($offer), 'Offer updated


successfully.');
}

/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/

public function destroy(Offer $offer): JsonResponse


{
$offer->delete();

return $this->sendResponse([], 'Offer deleted successfully.');


}
}
<?php

namespace App\Http\Controllers\API;

use Illuminate\Http\Request;
use App\Http\Controllers\API\BaseController as BaseController;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Validator;
use Illuminate\Http\JsonResponse;

class RegisterController extends BaseController


{
/**
* Register api
*
* @return \Illuminate\Http\Response
*/

public function register(Request $request): JsonResponse


{
$validator = Validator::make($request->all(), [
'name' => 'required',
'email' => 'required|email',
'password' => 'required',
'c_password' => 'required|same:password',
]);

if($validator->fails()){
return $this->sendError('Validation Error.', $validator-
>errors());
}

$input = $request->all();
$input['password'] = bcrypt($input['password']);
$user = User::create($input);
$success['token'] = $user->createToken('MyApp')->plainTextToken;
$success['name'] = $user->name;

return $this->sendResponse($success, 'User register successfully.');


}

/**
* Login api
*
* @return \Illuminate\Http\Response
*/

public function login(Request $request): JsonResponse


{
if(Auth::attempt(['email' => $request->email, 'password' => $request-
>password])){
$user = Auth::user();
$success['token'] = $user->createToken('MyApp')->plainTextToken;
$success['name'] = $user->name;

return $this->sendResponse($success, 'User login successfully.');


}
else{
return $this->sendError('Unauthorised.',
['error'=>'Unauthorised']);
}
}
}
10. Creamos el Resource API Eloquent “app/Http/Resources/OfferResource.php”

php artisan make:resource OfferResource

y modificamos su contenido por el siguiente:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class OfferResource extends JsonResource


{
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'name' => $this->name,
'description' => $this->description,
'created_at' => $this->created_at->format('d/m/Y'),
'updated_at' => $this->updated_at->format('d/m/Y'),
];
}
}

11. Levantamos el servidor

php artisan serve

12. NOTA: Recuerda poner los “headers” en las llamadas

'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.$accessToken,
]

You might also like