用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','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
用lumen构建API的相关流程的更多相关文章
- lumen 构建api(dingo api)
什么是 API API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力, ...
- 从草图绘制到实施交付:优秀API设计完整流程
设计好的API是一项繁复的工作,但是优秀的设计是可以通过人为规划实现的,在本文中,我们将研究什么是好的设计以及如何在开发过程中实现它,还将介绍API设计的三个重要阶段:草图绘制,原型设计和交付实施,最 ...
- [源码分析] 带你梳理 Flink SQL / Table API内部执行流程
[源码分析] 带你梳理 Flink SQL / Table API内部执行流程 目录 [源码分析] 带你梳理 Flink SQL / Table API内部执行流程 0x00 摘要 0x01 Apac ...
- 构建 API 的7个建议【翻译】
迄今为止,越来越多的企业依靠API来为客户提供服务,以确保竞争的优势和业务可见性.出现这个情况的原因是微服务和无服务器架构正变得越来越普遍,API作为其中的关键节点,继承和承载了更多业务. 在这个前提 ...
- springboot+mybatis-puls利用swagger构建api文档
项目开发常采用前后端分离的方式.前后端通过API进行交互,在Swagger UI中,前后端人员能够直观预览并且测试API,方便前后端人员同步开发. 在SpringBoot中集成swagger,步骤如下 ...
- Spring Boot中使用Swagger2构建API文档
程序员都很希望别人能写技术文档,自己却很不愿意写文档.因为接口数量繁多,并且充满业务细节,写文档需要花大量的时间去处理格式排版,代码修改后还需要同步修改文档,经常因为项目时间紧等原因导致文档滞后于代码 ...
- SpringBoot启动原理及相关流程
一.springboot启动原理及相关流程概览 springboot是基于spring的新型的轻量级框架,最厉害的地方当属自动配置.那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置 二 ...
- ASP.NET WebAPI构建API接口服务实战演练
一.课程介绍 一.王小二和他领导的第一次故事 有一天王小二和往常一下去上早班,刚吃完早餐刚一打开电脑没一会儿.王小二的领导宋大宝走到他的面前,我们现在的系统需要提供服务给其他内部业务系统,我看你平时喜 ...
- Spring Boot 整合Swagger2构建API文档
1.pom.xml中引入依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>spri ...
随机推荐
- Html5 Json应用
本文主要说明Json的基本概念,和一个在Html中使用Json给元素赋值的小例子,属于基础性信息 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Obj ...
- hibernate学习笔记之二 基本环境搭建
1.创建一个普通的java项目 2.加入Hibernate所有的jar包 3.建立包名com.bjpowernode.hibernate 4.建立实体类User.java package com.bj ...
- CentOS 安装OciLib 4.2.1 (Linux)
项目要用oracle , Windows的 OciLib 好弄, 今天安装到linux下 ,编译老是出错,最后几行如下: checking for OCILIB install path... /us ...
- postman使用
1.postman的下载:google首页左上角应用,点击后,如果没有下载postman,就在google商店搜索,点击右边按钮 2.下载后重新打开google首页,点击应用,可以看到已经下载过了,点 ...
- TCP同步与异步,长连接与短连接【转载】
原文地址:TCP同步与异步,长连接与短连接作者:1984346023 [转载说明:http://zjj1211.blog.51cto.com/1812544/373896 这是今天看到的一篇讲到T ...
- 计数排序(counting-sort)——算法导论(9)
1. 比较排序算法的下界 (1) 比较排序 到目前为止,我们已经介绍了几种能在O(nlgn)时间内排序n个数的算法:归并排序和堆排序达到了最坏情况下的上界:快速排序在平均情况下达到该上界. ...
- 原生js之四步走搞定Ajax
说到Ajax,不得不先提一下HTTP(HTTP,HyperText Transfer Protocol)协议,中文名:超文本传输协议,是互联网上应用最为广泛的一种网络协议.所有的WWW文件 ...
- windows环境tomcat8配置Solr5.5.1
前言 前前后后接触Solr有一个多月了,想趁着学习Solr顺便把java拾起来.我分别用4.X和5.X版本在windows环境下用jetty的方式.tomcat部署的方式自己搭建了一把.其中从4.x到 ...
- “NOSQL” 杂谈
引言: nosql 的兴起和革命,在我看来已经开始逐渐影响到了传统的sql的地位,但是仅仅是影响而已,取代是不太可能的. 正文: 两年前,一个偶然的机会开始接触到 nosql ( mongodb ). ...
- SET NOCOUNT 怎么理解
参考文章:http://www.cnblogs.com/si812cn/archive/2008/06/11/1217113.html 我简单的理解就是: 执行sql语句时 SET NOCOUNT O ...