[laravel]如何用 lumen 构建 API

WBOY
发布: 2016-06-20 12:27:14
原创
1195 人浏览过

什么是 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

<?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。可以去以下链接了解 Wiki documentation。我在这里简单介绍下。

$api->get('test', 'ApitestController@test');//访问本地地址/api/test,调用的方法是 ApitestController 的 test 方法 
登录后复制

而在这个里面

$api->group(['middleware' => 'api.auth', 'providers' => 'jwt'], function ($api) { }); 
登录后复制

写下的路由必须通过 JWT 验证,就是必须要登录获取 token。大家可以去 JWT 官网或搜一下相关文章了解 token 机制。 WIKI可以了解如何获取和解析 token。当然如果你的任务不需要获取 登录,可略过。

路由要遵循 restful url 规范。大家可以看下这篇文章 restful url

用到最多的是 laravel resource 路由

控制器

还记得上步里提到的那个路由吗,在那个路由调用的是 ApitestController 的 test 方法。接下来我们就来写一下这个控制器

打开项目目录

app/Http/V1_0/Controllers,我们项目的控制器都写在这个文件夹下,根据需要新建 ApitestController

<?phpnamespace 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

<?phpnamespace App\Entity; use Illuminate\Database\Eloquent\Model; class User extends Model {protected $hidden =  ['password'];protected $fillable = ['nation_id', 'mobile'];} 
登录后复制

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

public function test(){$users = User::all();return $this->response->collection($users, new UserTransformer);} 
登录后复制

在前面加上 use App\Entity\User;

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板