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

为什么用Lumen构建REST API

· Lumen访问速度非常快

· 每秒能够处理的请求数比Laravel更多

·使用nikic/FastRoute取代Symphony,从而提升了性能

安装 & 配置

这里我们使用Composer在web根目录下安装:composer create-project laravel/lumen rest_api

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

DB_DATABASE=

DB_USERNAME=

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/目录下创建一个迁移文件_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','CarController@createCar');

$app->put('car/{id}','CarController@updateCar');

$app->delete('car/{id}','CarController@deleteCar');

$app->get('car','CarController@index');

});

注意我将这组路由放到了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

最后更新:2019-01-07 18:52:17

赞 (9)

or

分享 (2)

php rest api lumen,使用Lumen框架创建 REST API 实例教程相关推荐

  1. Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程

    Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程 原文:Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程 Asp.Net Cor ...

  2. php如何访问web api,如何在PHP中创建Web API服务?

    SOAP和REST API是广泛使用的API. 考虑存在一个名为manage.php的PHP类,该类有助于管理数据库中的条目.class manage { private $entryId; func ...

  3. cad动态块制作翻转_CAD创建动态块实例教程:旋转参数和动作的应用 - CAD自学网...

    一.打开实例 1 里创建并保存的文件"我的动态块",也可以新建一个文件.在空白处画如图的图形,其中圆的半径为 5. 二.操作菜单"绘图"→"块&quo ...

  4. Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一)

    图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core Web Api实现图片上传存储以及生成缩略图呢?今天我就使用MongoDB作为图片存储 ...

  5. 【WEB API项目实战干货系列】- WEB API入门(一)

    这篇做为这个系列的第一篇,做基本的介绍,有经验的人可以直接跳到第二部分创建 ProductController. 创建 Web API 项目 在这里我们使用VS2013, .NET 4.5.1创建一个 ...

  6. Restful API是什么?初探Restful API,传统接口写法与Restful API接口写法区别

    Restful API是什么?初探Restful API?为什么要用Restful API?传统接口写法与Restful API接口写法区别,带着这些问题我们来具体了解下Restful API: 目录 ...

  7. 元数据驱动设计 —— 为动态移动应用创建Web API

    时间回到多年之前(当时我的头发还没这么稀疏),Google在4月1日这一天发布了Gmail,这不由得令许多人怀疑这个产品是否只是Google精心炮制的一个玩笑.但谁又能够去指责他们的怀疑呢?毕竟整个互 ...

  8. Java数据持久层框架 MyBatis之API学习八(Java API详解)

    对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...

  9. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

最新文章

  1. javascript中的链表结构—双向链表
  2. Unity3D Image 组件附入图片问题
  3. QuorumPeerMain.runFromConfig
  4. Bean的依赖注入概念
  5. 犹太教、基督教和伊斯兰教的简单关系
  6. 局域网从另一台电脑copy文件(Linux系统下)
  7. 基于JAX-WS的Web Service服务端/客户端 ;JAX-WS + Spring 开发webservice
  8. 博弈论中的简单合作博弈 C#实现
  9. Windows下完成SCTP简单抓包
  10. Flink Window TOPN: The window can only be ordered in ASCENDING mode.
  11. mysql 修改wait_timeout
  12. 网络安全与渗透:sql注入,一文详解(九)此生无悔入华夏,男儿何不带吴钩
  13. 百度依存句法分析标识说明
  14. AD20——批量快速放置元件管脚
  15. 经纬恒润天津研发总部项目开工奠基仪式圆满落幕
  16. python和matlab的区别_科学网—matlab和python语法对比(1) - 何亮的博文
  17. 软件加密系统Themida应用程序保护指南(八):额外的选择
  18. 让Android的emulator支持web camera
  19. ies4linux 本地安装,在Ubuntu Linux下安装ies4linux使用网银
  20. htc desire s刷亚太版(也叫全球版)android4.0 RUU的方法

热门文章

  1. easypoi 导入失败返回错误文件_从Excel批量导入数据说到ForkJoin的原理
  2. android checkbox 选中事件_挖穿Android第四十九天
  3. 高德地图文本标注html,设置点标注的文本标签
  4. c++设置一个二维字符组初值_C语言 | 统计一段话中的字符
  5. html怎么添加5px高的线,css给div添加0.5px的边框
  6. python创建线程在后台运行
  7. python使用sphinx自动生成文档
  8. centos/Linux 解决使用sudo命令时xxx is not in the sudoers file.This incident will be reported
  9. 不设置DIV的宽高,让它相对于页面水平垂直居中
  10. 如何在idea中调试spring bean