什么是 API

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

什么是 lumen

Lumen 是一个由 Laravel 组件搭建而成的微框架, 由 Laravel 官方维护. Lumen 为速度而生, 是当前最快的 PHP 框架之一, 甚至比类似的微框架 Silex 速度还要快.
从上面可以看出 Lumen 是去除了很多 配置和可自定义的选项的 Laravel。也就是说如果你先了解了 Laravel 就很容易掌握 lumen,在博客里有很多 laravel 的文章,大家可以搜一下去学习 。

用 lumen 开发 Api

首先要把 lumen 配置好,加入需要的 JWT,dingo 等组件。但在我们的项目中这些都是配置好的,这些你都不用担心。

构建路由

打开项目目录
app/Http/routes.php

 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$api = app('Dingo\Api\Routing\Router');
 
 
$api->version('v1.0',  ['namespace' => 'App\Http\V1_0\Controllers'],   function ($api) {
 
//物品分类列表
$api->get('category',  'CategoryController@index');
 
//验证项目是否运行成功
$api->get('test', 'ApitestController@test');
 
// 需提供 JWT
$api->group(['middleware' => 'api.auth', 'providers' => 'jwt'], function ($api) {
 
});
});
 

上面是最初打开看到的界面,很多人可能不理解是什么意思。去看 lumen 文档也和上面不太一样。事实上上面并不是 lumen 的原生语法,上面用到的是 dingo API。可以去以下链接了解 dingo Wiki documentation。我在这里简单介绍下。

 
 
1
2
$api->get('test', 'ApitestController@test');//访问本地地址/api/test,调用的方法是 ApitestController 的 test 方法
 

而在这个里面

 
 
1
2
3
4
$api->group(['middleware' => 'api.auth', 'providers' => 'jwt'], function ($api) {
 
});
 

写下的路由必须通过 JWT 验证,就是必须要登录获取 token。大家可以去 JWT 官网或搜一下相关文章了解 token 机制。 jwt WIKI可以了解如何获取和解析 token。
路由要遵循 restful url 规范。大家可以看下这篇文章 restful url
用到最多的是 laravel resource 路由

控制器

还记得上步里提到的那个路由吗,在那个路由调用的是 ApitestController 的 test 方法。接下来我们就来写一下这个控制器
打开项目目录
app/Http/V1_0/Controllers,我们项目的控制器都写在这个文件夹下,根据需要新建 ApitestController

 
 
1
2
3
4
5
6
7
8
9
10
<?php namespace App\Http\v1_0\Controllers;
 
class ApiTestController extends ApiController
{
public function test()
{
return $this->response()->array(['api 项目运行成功']);
}
}
 

在这里有个 test 方法,就是我们在上一步的路由中访问的方法。也就是说当我们访问本地地址/api/test 时就会回应 ‘api 项目运行成功’。到此我们的 API 经过的流程就基本完成了。不过可能会有很多同学会问数据库呢?事实上数据库也只是为这个 Api 提供数据而已。

数据库

在这里我们将展示数据库的数据如何在控制器中使用。首先新建 migration,大家参考这篇文章。有的时候还要填入数据,大家
参考这篇文章
然后我们要建立一个 Model。假设我们现在有一个 users 表。
打开 app/Entity 文件夹 新建文件 User.php

 
 
1
2
3
4
5
6
7
8
9
10
<?php namespace App\Entity;
 
use Illuminate\Database\Eloquent\Model;
 
class User extends Model
{
protected $hidden =   ['password'];
protected $fillable = ['nation_id', 'mobile'];
}
 

$fillable 是允许批量操作的白名单,具体的大家可以去看看官网。
接下来我们就可以使用 users 这个表了。方法改为

 
 
1
2
3
4
5
6
public function test()
{
$users = User::all();
return $this->response->collection($users, new UserTransformer);
}
 

在前面加上 use App\Entity\User;
这里用到了 Transformer,必须要新建个文件,可以看下这篇文章。如果不想建,可以直接 return $users;这样当访问连接时会返回 users 表的数据。了解更多,可以去看官方文档的数据库一节。很多时候为了方便,我们分离数据库层,可以参考这篇文章

总结

在这里我简单介绍了下构建 API 的步骤,主要是给大家的学习带来方便,文章里的链接和官方文档,大家都可以看一下,相信你会很快学会的。如果你感觉文章有什么问题或者你还又什么困惑的话,欢迎大家在下面留言。附laravel 学习资源大全

lumen 构建api(dingo api)的更多相关文章

  1. Dingo Api 1.0在laravel5.2中的简单应用

    Dingo Api是为基于laravel的开发提供了一系列工具集,这些工具集可以帮助开发者快速构建API.Dingo Api最新的版本是2.0.0-alpha1,这个版本需要php7.0以上的php版 ...

  2. 用lumen构建API的相关流程

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

  3. lumen 使用 dingo API 在 phpunit 中 404 的解决方法, 以及鉴权问题

    1. phpunit.xml 中添加 dingo 相关配置 <env name="API_STANDARDS_TREE" value="x"/> & ...

  4. 第四节:dingo/API 最新版 V2.0 之 Responses (连载)

    因为某些某些原因,不能按时更新,唉.我会尽力,加快速度.(这句话不是翻译的哈) 原文地址--> https://github.com/dingo/api/wiki/Responses A fun ...

  5. 五分钟入门 Dingo API

    基于 https://laravel-china.org/doc... 文档更简洁的描述Dingo,直戳重点,注重实践 Django-Book 概述 Dingo API帮助您轻松快速地构建自己的API ...

  6. dingo/API 最新版 V2.0 之安装讲解

    我发现关于dingo/API V2.0的资料少之又少,应该也是发布时间不久的原因.下面,我就来给大家讲解(翻译)下官方的英文文档,如果有说的不对的地方,请指正.先附上,官网wiki地址https:// ...

  7. 第一节: dingo/API 最新版 V2.0 之安装讲解(连载)

    我发现关于dingo/API V2.0的资料少之又少,应该也是发布时间不久的原因.下面,我就来给大家讲解(翻译)下官方的英文文档,如果有说的不对的地方,请指正.先附上,官网wiki地址https:// ...

  8. dingo/api 使用 知识

    Dingo 能为Laravel提供一整套包括从路由,到认证的RESTful API开发工具 Laravel & Lumen RESTFul API 扩展包:Dingo API(一) —— 安装 ...

  9. 爬虫入门系列(三):用 requests 构建知乎 API

    爬虫入门系列目录: 爬虫入门系列(一):快速理解HTTP协议 爬虫入门系列(二):优雅的HTTP库requests 爬虫入门系列(三):用 requests 构建知乎 API 在爬虫系列文章 优雅的H ...

随机推荐

  1. VS2010+PCL配置

    原文出自(转载): http://blog.csdn.net/renshengrumenglibing/article/details/9073675 1.安装 pcl 的完全安装包可以到: http ...

  2. linux crontab定时任务调用CI框架PHP代码

    *****监控项目中使用*****: sudo crontab -u wangyan -e i 5,25,45 * * * * wget http://xxx.xxx.com/xxx/xx Esc : ...

  3. TopCoder比赛总结表

    TopCoder                        250                              500                                 ...

  4. Swift----函数 、 闭包 、 枚举 、 类和结构体 、 属性

    1 数组排序 1.1 问题 本案例实现一个整型数组排序的函数,数组排序的规则由传递的规则函数决定. 1.2 方案 首先定义一个整型数组排序函数sortInts,该函数有一个整型数组类型的参数,该参数必 ...

  5. 十分钟了解分布式计算:Google Dataflow

    介绍 Google Cloud Dataflow是一种构建.管理和优化复杂数据处理流水线的方法,集成了许多内部技术,如用于数据高效并行化处理的Flume和具有良好容错机制流处理的MillWheel.D ...

  6. PAT (Advanced Level) Practise:1002. A+B for Polynomials

    [题目链接] This time, you are supposed to find A+B where A and B are two polynomials. Input Each input f ...

  7. DSL 或者说是抽象 或者说是沉淀 ,我看到的不错的一篇文章

    作者:张浩斌 链接:https://www.zhihu.com/question/45552115/answer/99388265 来源:知乎 著作权归作者张浩斌和知乎所有.   ---------- ...

  8. CLR via C# 3rd - 02 - Building, Packaging, Deploying, and Administering Applications and Types

    1. C# Compiler - CSC.exe            csc.exe /out:Program.exe /t:exe /r:MSCorLib.dll Program.cs       ...

  9. Beta版本测试报告

    爬虫测试: 由于爬虫是整个系统的数据来源,十分的重要,但是由于引用了jar包并且运行复杂,这里主要做功能性测试,通过增加seed,运行爬虫,可以在后台控制台看到日志的不断刷新以及数据库条目的不断增加, ...

  10. ubuntu 14.04安装nginx+php+mysql

    前段时间的折腾,颇费一番周折,过程中发现网上的许多资料比较老旧过时了,所以在这里也简单把过程重新整理一遍,争取一帖解决问题. 基于最新的Ubuntu 14.04(2014年9月)搭建nginx.php ...