首页 > 编程语言 > 使用 PHP 和 Laravel 构建 REST API 的教程

使用 PHP 和 Laravel 构建 REST API 的教程

时间:2023-02-13 16:37:26浏览次数:57  
标签:Laravel tasks REST task API 路由

Representational State Transfer ( ​​REST​​ ) 是一种用于构建 Web 服务的流行软件架构样式。REST API 允许客户端通过向特定端点或“路由”发出 HTTP 请求来从服务器检索和操作数据。在本教程中,我们将学习如何使用 PHP 和 Laravel 框架构建 REST API。

​Laravel​​是一种流行的开源 PHP 框架,它提供了一组工具和功能来快速高效地构建 Web 应用程序。它包括一个内置的 HTTP 路由系统、一个数据库查询生成器和一个强大的任务调度程序等。

要开始,您需要在您的机器上安装 PHP 和 Composer。如果您还没有它们,您可以从官方 PHP 和 Composer 网站下载它们。

接下来,我们将使用 Laravel 安装程序创建一个新的 Laravel 项目。打开终端并输入以下命令:

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

这将在当前目录中创建一个名为“my-project”的新 Laravel 项目。安装完成后,导航到项目目录并通过运行以下命令启动开发服务器:

php artisan serve

您现在应该能够通过​​http://localhost:8000​​访问您的 Laravel 项目。

现在我们已经设置了一个 Laravel 项目,我们可以开始构建我们的 REST API。我们需要做的第一件事是为我们的数据创建模型和迁移。在此示例中,我们将为“任务”创建一个模型,它将表示用户需要完成的任务列表。

要创建模型和迁移,请运行以下命令:

php artisan make:model Task -m

这将在“database/migrations”目录中创建一个名为“Task”的新模型和一个相应的迁移文件。打开迁移文件并修改“up”方法以创建包含以下列的“tasks”表:

public function up()
{
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('description');
$table->boolean('completed')->default(false);
$table->timestamps();
});
}

接下来,运行以下命令在数据库中创建“tasks”表:

php artisan migrate

通过模型和迁移设置,我们现在可以为我们的 REST API 创建路由。在 Laravel 中,路由定义在“routes/api.php”文件中。打开此文件并添加以下路由:

Route::get('tasks', 'TaskController@index');
Route::get('tasks/{task}', 'TaskController@show');
Route::post('tasks', 'TaskController@store');
Route::put('tasks/{task}', 'TaskController@update');
Route::delete('tasks/{task}', 'TaskController@destroy');

这些路由对应于以下 HTTP 方法和端点:

  • GET /tasks:检索所有任务的列表
  • GET /tasks/{task}:通过 ID 检索特定任务

现在创建 TaskController 来处理我们定义的每个路由的逻辑。运行以下命令生成控制器:

php artisan make:controller TaskController

这将在“app/Http/Controllers”目录中创建一个名为“TaskController”的新控制器。打开控制器并添加以下方法:

public function index()
{
return Task::all();
}

public function show(Task $task)
{
return $task;
}

public function store(Request $request)
{
$task = Task::create($request->all());

return response()->json($task, 201);
}

public function update(Request $request, Task $task)
{
$task->update($request->all());

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

public function destroy(Task $task)
{
$task->delete();

return response()->json(null, 204);
}

这些方法对应于我们之前定义的路由。index 方法返回所有任务的列表,show 方法按 ID 返回特定任务,store 方法创建新任务,update 方法更新现有任务,destroy 方法删除任务。

有了路由和控制器,我们的 REST API 就完成了。您可以使用 Postman 等工具向端点发出 HTTP 请求来对其进行测试。

就是这样!您现在已经学习了如何使用 PHP 和 Laravel 构建 REST API。您可以根据需要通过添加更多路由和功能来继续扩展此 API。我希望本教程对您有所帮助,并且您现在对如何使用 Laravel 构建 REST API 有了很好的理解。

标签:Laravel,tasks,REST,task,API,路由
From: https://blog.51cto.com/u_1213352/6054467

相关文章

  • laravel 分表日志功能
    1.生成定时任务,自动出案件表命令行创建定时任务生成脚本  phpartisanmake:commandCreateLog脚本CreateLog的handle方法生成分表的表名if(!Schema......
  • Lambda表达式与Stream API
    Lambda表达式与StreamAPI​​1、Lambda表达式​​​​1.1Lambda表达式语法​​​​1.2案例:实现Comparator接口​​​​1.3类型推断​​​​1.4Lambda类型推断​​​​2......
  • Spring MVC REST
    SpringMVCRESTREST:RepresenttationalStateTransfer,资源表现层状态转换,是目前比较主流的一种互联网架构,它结构清晰,标准规范,易于理解,便于扩展。资源(resource)网络......
  • CesiumJS PrimitiveAPI 高级着色入门 - 从参数化几何与 Fabric 材质到着色器 - 下篇
    目录3.使用GLSL着色器3.1.为Fabric材质添加自定义着色代码-Fabric材质的本质3.2.社区实现案例-泛光墙体和流动线材质3.3.直接定义外观对象的两个着色器3.4.*......
  • k8s安装YAPI
    一、前置条件提前安装MongoDB二、YAML文件namespace自行替换Deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:......
  • Laravel — P45:控制器编辑/更新 (CMP)
    在我们完整地结束这个项目之前,我们还有几篇文章要讲。之后我们将继续讨论更高级的主题。在本文中,我们将解决如何编辑记录。我们需要显示一个表单,其中已经为特定记录填充了所......
  • 蜗牛式学习Java--基础进阶2--常用API(Scanner,String,StringBuilder)
     1.2键盘录入字符串Scanner类:next():遇到了空格,就不再录入数据了,结束标记:空格,tab键nextLine():可以将数据完整的接收过来,结束标记:回......
  • Laravel — P47:最后的润色 (CMP)
    是时候结束这个项目并继续使用Laravel中更高级的功能了。在我们这样做之前,我们需要向我们的汽车管理项目添加一些额外的功能,比如删除照片。这是一个有趣的小项目,在我看来......
  • Laravel — P46:控制器销毁(CMP)
    我们到了最后一个方法:​destroy​​。您猜对了,该​​destroy​​方法将从数据库中删除资源。这是最简单的一堆。我们只需要创建一个链接,删除一个资源并将用户返回到页面​​......
  • cnblog_fastapi 中的 schemas 和 models 的区别 - python 后端实战经验分享 - Segment
    pythonfastapischema和model的区别ToavoidconfusionbetweentheSQLAlchemymodelsandthePydanticmodels,wewillhavethefilemodel......来自fastapi......