用lumen构建API的相关流程

概述

Lumen是一个基于Laravel的微框架,主要用于小型应用和微服务,专注于性能和速度的优化,该框架一个重要的应用就是构建 RESTAPI。

为什么用Lumen构建REST API

Lumen访问速度非常快 每秒能够处理的请求数比Laravel更多 使用 nikic/FastRoute 取代Symphony,从而提升了性能

安装 & 配置

关于Lumen详细安装教程参考官方文档: http://laravelacademy.org/post/6328.html

这里我们使用Composer在web根目录下安装:

composer create-project laravel/lumen rest_api

安装完成后,在 .env 中配置数据库连接信息:

DB_DATABASE=<db_name>
DB_USERNAME=<db_username>
DB_PASSWORD=<db_password>

然后在 bootstrap/app.php 中取消下面两行之前的注释:

$app->withFacades();
$app->withEloquent();

此时在浏览器访问 rest_api.dev (Mac下使用Valet,windows请自行设置虚拟域名),页面显示如下:

Lumen (5.3.2) (Laravel Components 5.3.*)

数据库迁移

接下来我们来创建数据表。

在项目根目录下运行如下命令:

php artisan make:migration create_table_cars --create=cars

该命令将会在 database/migrations/ 目录下创建一个迁移文件 <date>_create_table_cars.php ,接下来我们来编辑这个文件来定义数据表。

Schema::create(‘cars‘, function (Blueprint $table) {
$table->increments(‘id‘);
$table->string(‘make‘);
$table->string(‘model‘);
$table->string(‘year‘);
});

现在我们来运行这个迁移:

php artisan migrate

这样,就会在数据库中创建对应的表:


创建模型

接下来我们在 app 目录下创建模型文件 Car.php ,并编写代码如下:

<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Car extends Model
{
protected $fillable = [‘make‘, ‘model‘, ‘year‘];
public $timestamps = false;
}

创建控制器

然后创建控制器文件 app/Http/Controllers/CarController.php :

<?php
namespace App\Http\Controllers;
use App\Car;
use Illuminate\Http\Request;
class CarController extends Controller
{
public function createCar(Request $request)
{
$car = Car::create($request->all());
return response()->json($car);
}
public function updateCar(Request $request, $id)
{
$car = Car::find($id);
$car->make = $request->input(‘make‘);
$car->model = $request->input(‘model‘);
$car->year = $request->input(‘year‘);
$car->save();
return response()->json($car);
}
public function deleteCar($id)
{
$car = Car::find($id);
$car->delete();
return response()->json(‘删除成功‘);
}
public function index()
{
$cars = Car::all();
return response()->json($cars);
}
}

定义路由

剩下的就是配置路由了,我将会为增删改查配置对应路由。打开 app/Http/routes.php 并添加如下路由:

$app->group([‘prefix‘ => ‘api/v1‘], function($app)
{
$app->post(‘car‘,‘[email protected]‘);
$app->put(‘car/{id}‘,‘[email protected]‘);
$app->delete(‘car/{id}‘,‘[email protected]‘);
$app->get(‘car‘,‘[email protected]‘);
});

注意我将这组路由放到了 api/v1 前缀下。

测试API

现在让我们用curl来测试这组REST API。

首先我们来测试创建:

curl -i -X POST -H "Content-Type:application/json" http://rest_api.dev/api/v1/car -d ‘{"make":"audi","model":"tt","year":"2016"}‘

输出如下则表示创建成功:

HTTP/1.0 200 OK
Host: rest_api.dev
Connection: close
X-Powered-By: PHP/7.0.6
Cache-Control: no-cache
Content-Type: application/json
Date: Sun, 13 Nov 2016 07:06:13 GMT
{"make":"audi","model":"tt","year":"2016","id":1}

然后我们来测试更新刚刚创建的这条记录:

curl -H "Content-Type:application/json" http://rest_api.dev/api/v1/car/1 -X PUT -d ‘{"make":"bmw","model":"x6","year":"2016"}‘

输出如下,表示更新成功:

{"id":1,"make":"bmw","model":"x6","year":"2016"}

接下来我们来测试列表页面:

curl -H "Content-Type:application/json" http://rest_api.dev/api/v1/car -X GET

输出如下:

[{"id":1,"make":"bmw","model":"x6","year":"2016"}]

最后,我们测试下删除API:

curl -X DELETE http://rest_api.dev/api/v1/car/1

时间: 2024-11-05 16:06:29

用lumen构建API的相关流程的相关文章

linux 内核网络协议栈阅读理解--带详尽注释以及相关流程调用注释,附 github 注释后源码

linux 内核网络协议栈阅读理解--带详尽注释以及相关流程调用注释,对理解内核协议栈源码很有帮助 对理解阅读 linux 协议栈源码很用帮助 github 地址: https://github.com/y123456yz/Reading-and-comprehense-linux-Kernel-network-protocol-stack

Android 7.0 ActivityManagerService(8) 进程管理相关流程分析(2)

前一篇博客进程管理相关流程分析(1)里, 我们介绍了AMS中updateLruProcessLocked函数相关的流程. updateLruProcessLocked只是按照进程中运行的组件,粗略地定义了不同进程的优先级. 实际上,Android根据进程的oom_adj进行了更加细致的进程分类, 而AMS中的updateOomAdjLocked函数,就是用于更新进程的oom_adj值. 本篇博客中,我们来看看AMS中updateOomAdjLocked相关的流程. 一.ProcessList.j

Spring Boot中使用Swagger2构建API文档

程序员都很希望别人能写技术文档,自己却很不愿意写文档.因为接口数量繁多,并且充满业务细节,写文档需要花大量的时间去处理格式排版,代码修改后还需要同步修改文档,经常因为项目时间紧等原因导致文档滞后于代码,接口调用方的抱怨声不绝于耳.而程序员是最擅长"偷懒"的职业了,自然会有多种多样的自动生成文档的插件.今天要介绍的就是Swagger. 接下来我们在Spring Boot中使用Swagger2构建API文档 Swagger是一个简单但功能强大的API表达工具.它具有地球上最大的API工具生

springboot利用swagger构建api文档

一.引入jar pom.xml <!-- swagger --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>io.spr

《python机器学习—预测分析核心算法》:构建预测模型的一般流程

参见原书1.5节 构建预测模型的一般流程 问题的日常语言表述->问题的数学语言重述重述问题.提取特征.训练算法.评估算法 熟悉不同算法的输入数据结构:1.提取或组合预测所需的特征2.设定训练目标3.训练模型4.评估模型在训练数据上的性能表现 机器学习:开发一个可以实际部署的模型的全部过程,包括对机器学习算法的理解和实际的操作 通常,有非常切实的原因,导致某些算法被经常使用,了解背后的原因 (1)构造一个机器学习问题审视数据集中的数据,确定需要做何种形式的预测如,这些数据代表什么?如何与预测任务关

Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(二)

一.说明 1.1 说明 前面介绍采用 Jenkinsfile + KubernetesPod.yaml 方式进行部署项目(Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(一)),maven.kubectl 等容器工具需要在 KubernetesPod.yaml 中定义,存放在代码中,比较繁琐. 这里采用 Jenkinsfile + docker in docker 方式进行部署,把 maven 等工具都运行在 docker 容器中,这样减少了 yaml 文

git 相关流程和报错解决

git 相关流程: 预先配置: gitroot $ git config user.name XXXgitroot $ git config user.email [email protected] git remote add origin [email protected]:ERP/user-dockerfile.git 1. git config --global user.name XXX 2. 克隆master到本地,git clone [email protected]:bag/us

构建工具-Gulp 相关知识

layout: layout title: 『构建工具-Gulp』相关内容整理 date: 2017-04-26 22:15:46 tags: Gulp categories: Tools --- Gulp- 简介 Automate and enhance your workflow | 用自动化构建工具增强你的工作流程 Gulp 是什么? gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器:它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完

用MySQL构建一个工作跟踪流程

为了了解在Node中如何使用MySQL,我们来看一个需要RDBMS的程序. 假设你要创建一个Web程序,用来记录你是如何度过工作日的.这需要记录工作的日期,花在工作上的时间,以及工作完成情况的描述. 1. 系统分析 1.1 系统流程 这个程序会有个表单,用来输入工作的详细信息,如图: ? 工作信息输入后,可以被归档或删除,让它不再显示在用来输入更多工作的输入域上方,如图. 点击"Archived Work"链接可以把之前归档的工作项全部显示出来. ? 1.2 系统任务 创建程序逻辑 创