REST (от англ. Representational State Transfer — «передача репрезентативного состояния») является архитектурным методом коммуникаций с использованием HTTP протокола обмена данными. Программный интерфейс приложения (API) – это способ соединения между компьютером или компьютерными программами. Это тип программного интерфейса, предлагающий сервисы другим программам. Если коротко, то api может делать мобильные приложения или другие сервисы, способными общаться с вашим приложением.
В этой заметке я хочу поделиться с вами очень простым путем создания API с использованием Laravel.
Создание проекта
Создайте новый проект или пропустите этот шаг если у вас он уже есть.
composer create-project laravel/laravel laravel-api --prefer-dist
Создание миграций
Установите соединение с базой данных в .env и затем создайте миграцию для таблицы. Здесь я буду использовать таблицу posts в качестве примера.
php artisan make:migration create_posts_table
В файле миграций укажем следующее:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('slug');
$table->string('body');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
Запустим миграцию используя команду php artisan migrate
.
Создание моделей и контроллеров
Создадим модель и контроллер следующей командой:
php artisan model Post -c
Запишем функций: all, show, store, update и destroy в контроллер. Все это будет выглядеть следующим образом в нашем PostController:
<?php
namespace App\Http\Controllers;
use App\Models\Post;
use Exception;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index()
{
try {
$posts = Post::all();
} catch (Exception $e) {
return response()->json([
'data' => [],
'message'=>$e->getMessage()
], JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
}
return response()->json([
'data' => $posts,
'message' => 'Succeed'
], JsonResponse::HTTP_OK);
}
public function show($id)
{
try {
$posts = Post::find($id);
} catch (Exception $e) {
return response()->json([
'data' => [],
'message'=>$e->getMessage()
], JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
}
return response()->json([
'data' => $posts,
'message' => 'Succeed'
], JsonResponse::HTTP_OK);
}
public function store(Request $request)
{
try {
$posts = Post::create($request->all());
} catch (Exception $e) {
return response()->json([
'data' => [],
'message'=>$e->getMessage()
], JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
}
return response()->json([
'data' => $posts,
'message' => 'Succeed'
], JsonResponse::HTTP_OK);
}
public function update(Request $request, $id)
{
try {
$posts = Post::find($id)
->update($request->all());
} catch (Exception $e) {
return response()->json([
'data' => [],
'message'=>$e->getMessage()
], JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
}
return response()->json([
'data' => $posts,
'message' => 'Succeed'
], JsonResponse::HTTP_OK);
}
public function destroy($id)
{
try {
$posts = Post::destroy($id);
} catch (Exception $e) {
return response()->json([
'data' => [],
'message'=>$e->getMessage()
], JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
}
return response()->json([
'data' => $posts,
'message' => 'Succeed'
], JsonResponse::HTTP_OK);
}
}
Добавьте свойства guarded или fillable в модель Post, потому-что в контроллере мы используем массовое присвоение.
protected $guarded = ['id'];
Работа с маршрутами
Отредактируйте маршруты в файле api.php
:
use App\Http\Controllers\PostController;
Route::group(['prefix'=>'post'], function () {
Route::get('/', [PostController::class, 'index']);
Route::get('/{id}', [PostController::class, 'show']);
Route::post('/', [PostController::class, 'store']);
Route::put('/{id}', [PostController::class, 'update']);
Route::delete('/{id}', [PostController::class, 'destroy']);
});
Test
Нам нужно приложение для тестирования запросов к API. Для этого подойдет postman или что-либо похожее на него. Скачать postman можно по ссылке.
Спасибо за прочтение заметки.