专栏首页LaravelCodeLaravel 中使用 DingoAPI

Laravel 中使用 DingoAPI

Laravel 中使用 DingoAPI

安装laravel 这里以5.5版本为例

composer create-project laravel/laravel laravel-api --prefer-dist "5.5.*"

1. 安装 DingoAPI

composer require dingo/api:2.0.0-alpha2

发现报错

Problem 1
    - Conclusion: remove laravel/framework v5.5.40
    - Conclusion: don't install laravel/framework v5.5.40
    - dingo/blueprint 0.2.2 requires illuminate/filesystem 5.1.* || 5.2.* || 5.3.* || 5.4.* -> satisfiable by illuminate/filesystem[v5.1.1, v5.1.13, v5.1.16, v5.1.2, v5.1.20, v5.1.22, v5.1.25, v5.1.28, v5.1.30, v5.1.31, v5.1.41, v5.1.6, v5.1.8, v5.2.0, v5.2.19, v5.2.21, v5.2.24, v5.2.25, v5.2.26, v5.2.27, v5.2.28, v5.2.31, v5.2.32, v5.2.37, v5.2.43, v5.2.45, v5.2.6, v5.2.7, v5.3.0, v5.3.16, v5.3.23, v5.3.4, v5.4.0, v5.4.13, v5.4.17, v5.4.19, v5.4.27, v5.4.36, v5.4.9].
    - dingo/blueprint v0.2.0 requires illuminate/filesystem 5.1.* || 5.2.* || 5.3.* -> satisfiable by illuminate/filesystem[v5.1.1, v5.1.13, v5.1.16, v5.1.2, v5.1.20, v5.1.22, v5.1.25, v5.1.28, v5.1.30, v5.1.31, v5.1.41, v5.1.6, v5.1.8, v5.2.0, v5.2.19, v5.2.21, v5.2.24, v5.2.25, v5.2.26, v5.2.27, v5.2.28, v5.2.31, v5.2.32, v5.2.37, v5.2.43, v5.2.45, v5.2.6, v5.2.7, v5.3.0, v5.3.16, v5.3.23, v5.3.4].
    - dingo/blueprint v0.2.1 requires illuminate/filesystem 5.1.* || 5.2.* || 5.3.* -> satisfiable by illuminate/filesystem[v5.1.1, v5.1.13, v5.1.16, v5.1.2, v5.1.20, v5.1.22, v5.1.25, v5.1.28, v5.1.30, v5.1.31, v5.1.41, v5.1.6, v5.1.8, v5.2.0, v5.2.19, v5.2.21, v5.2.24, v5.2.25, v5.2.26, v5.2.27, v5.2.28, v5.2.31, v5.2.32, v5.2.37, v5.2.43, v5.2.45, v5.2.6, v5.2.7, v5.3.0, v5.3.16, v5.3.23, v5.3.4].
    - don't install illuminate/filesystem v5.1.1|don't install laravel/framework v5.5.40
    ...

因为这个包尚处在开发阶段,暂时没有稳定版,因此 我们需要手动添加。

打开 composer.json 手动添加 手动添加 "dingo/api": "2.0.0-alpha2"

"require": {
        "php": ">=7.0.0",
        "fideloper/proxy": "~3.3",
        "laravel/framework": "5.5.*",
        "laravel/tinker": "~1.0",
        "dingo/api": "2.0.0-alpha2"
    },

执行composer update

composer update

稍等片刻,哇哦,顺利安装......

2. 配置

dingo 的配置文件发布出来

php artisan vendor:publish
Which provider or tag's files would you like to publish?:
  [0] Publish files from all providers and tags listed below
  [1] Provider: Dingo\Api\Provider\LaravelServiceProvider
  [2] Provider: Fideloper\Proxy\TrustedProxyServiceProvider
  [3] Provider: Illuminate\Mail\MailServiceProvider
  [4] Provider: Illuminate\Notifications\NotificationServiceProvider
  [5] Provider: Illuminate\Pagination\PaginationServiceProvider
  [6] Provider: Laravel\Tinker\TinkerServiceProvider
  [7] Tag: laravel-mail
  [8] Tag: laravel-notifications
  [9] Tag: laravel-pagination

按照命令行交互,我们输入 1 即可。接着就会在 config 目录下生成 api.php,可以打开大体浏览下各项配置,里面的每一项都可以用 env 文件来配置。

我们暂时只关心如下配置:

  • API_STANDARDS_TREE
  • API_SUBTYPE
  • API_VERSION
  • API_PREFIX
  • API_DOMAIN
  • API_NAME
  • API_STRICT
  • API_DEBUG

接下来 针对以上配置一一作出解释:

  1. API_STANDARDS_TREE : 有三个可选值:
    • x : 本地开发的或私有环境的
    • prs : 主要用于非商业销售的项目,未对外发布
    • vnd :对外公开,所有用户可以访问
  2. API_SUBTYPE :项目的简称,或者项目名称
  3. API_VERSION : 版本号
  4. API_PREFIXAPI_DOMAIN : 前缀和子域名, 前缀或子域名是必须的,并且同时只有一个
  5. API_NAME : API的名字只有在使用API Blueprint命令生成文档的时候才用到,这个名字作为默认名字以免生成文档时需要手动指定名字。
  6. API_STRICT : 严格解析,值为 true 或 false,默认为 false ,开启严格解析,意味着你不可以使用浏览器来进行访问。
  7. API_DEBUG deuug 模式,方便查看错误信息

其他还有一些,分别为响应格式、错误格式、认证等等,就不一一介绍了。

我们打开 .env 文件,配置刚才所说的参数

API_STANDARDS_TREE=x
API_SUBTYPE=laravel-api
API_PREFIX=api
API_VERSION=v1
API_DEBUG=true

3. 编写测试接口

我们知道 laravel 路由文件 有专门的api 路由文件。打开该文件

<?php

use Illuminate\Http\Request;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

由于我们使用 DingoApi ,因此我们同样使用 DingoApi 的路由。将内容全部替换 如下内容:

<?php
use Illuminate\Http\Request;

$api = app('Dingo\Api\Routing\Router');
$api->version('v1', function($api) {
    $api->get('test', function() {
        return response('hello word');
    });
});

使用接口调试工具 来进行测试 推荐使用 POSTMAN 调试工具,

  1. 网址中输入地址 http://laravel-api.test/api/test ,不出意外 应该会输出 hello world 字样
  2. 另外一种很常见的访问方式是通过 Accept 添加头信息 Headers

Accept: application/x.laravel-api.v1+json

似乎很难看出效果,我们新增一条路由试试。

.
.
.
$api->version('v2', function($api) {
    $api->get('test', function() {
        return response('hello laravel');
    });
});

接着改变 Accept

Accept: application/x.laravel-api.v2+json

ok,以上我们仅仅是测试我们的接口是不是可以正常用心,实际项目中,我们不可能所有的代码都放在路由文件中。接下来,我们新建控制器来替换路由的示例代码。

首先,我们新建一个基类控制器,让我们的所有其他控制器,默认继承我们新建的控制器。

php artisan make:controller Api/v1/Controller

php artisan make:controller Api/v2/Controller

我们引入 DingoApi的 Helpers 来处理有关接口的响应

可以看出,我们在 app\Http\Controllers 新建了一个文件夹 Api ,同时在此目录下又新建了 v1v2目录

新建 Api 目录,我们是为了和其他 web 控制器区分,我们将所有有关接口的控制器都放到Api 目录下.增加 v1v2 我们是为了后续的版本管理

打开这两个控制器, 替换如下代码:

<?php

namespace App\Http\Controllers\Api\v1;

use Dingo\Api\Routing\Helpers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller as BaseController;

class Controller extends BaseController
{
    use Helpers;
}

同理:v2 下也是这样修改 (注意命名空间,不要全部复制,记得修改哦)。

新增控制器,比如我们添加一个 Users 控制器

php artisan make:controller Api/v1/UsersController

php artisan make:controller Api/v2/UsersController

打开新建的 UsersController,替换成如下代码:

<?php

namespace App\Http\Controllers\Api\v1;

use Illuminate\Http\Request;

class UsersController extends Controller
{
    public function store()
    {
        return $this->response->array(['errmsg' => 'this is v1']);
    }
}

v2 下我们稍微改变下返回数据,以便直观看出

<?php

namespace App\Http\Controllers\Api\v2;

use Illuminate\Http\Request;

class UsersController extends Controller
{
    public function store()
    {
        return $this->response->array(['errmsg' => 'this is v2']);
    }
}

控制器就算完成了,我们添加两条路由。

.
.
.
$api->version('v1', [
    'namespace' => 'App\Http\Controllers\Api\v1'
], function($api) {
    $api->post('users', 'UsersController@store')
        ->name('api.v1.users.store');
});

$api->version('v2', [
    'namespace' => 'App\Http\Controllers\Api\v2'
], function($api) {
    $api->post('users', 'UsersController@store')
        ->name('api.v2.users.store');
});

增加了一个 namespace 参数,目的是所有路由都会指向 该 namespace

访问方法和上面一样。

ok,以上就是 laravel 中初步安装 DingoApi ,并且配置的基础教程,更多使用请阅读 官方文档

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 通过 Laravel 创建一个 Vue 单页面应用(三)

    我们将通过演示在 vue-router 进入一个路由之前,如何异步加载数据来继续使用 Laravel 构建我们的 Vue SPA。

    hedeqiang
  • 正确使用状态码

    hedeqiang
  • 通过 Laravel 创建一个 Vue 单页面应用(六)

    我们将完成基本 CURD 的最后一部分:创建新用户。您已经拥有了我们之前讨论过的主题中所需要的所有工具,因此可以尝试创建用户并将本文与您的工作进行比较。

    hedeqiang
  • 小鼠全基因组数据分析

    We performed WGS on a CRISPR–Cas9-edited mouse to identify all off-target mutati...

    生信技能树
  • 草图秒变风景照,英伟达神笔马良GaoGAN终于开源了

    还记得英伟达在 GTC 2019 披露的令人惊叹的图像生成器 GauGAN 吗?仅凭几根线条,草图秒变风景照,自动生成照片级逼真图像的技术堪比神笔马良。

    代码医生工作室
  • Winform文件下载之WinINet

    在C#中,除了webclient我们还可以使用一组WindowsAPI来完成下载任务。这就是Windows Internet,简称 WinINet。本文通过一个...

    葡萄城控件
  • 如何轻松了解深度学习模型中使用了混合精度?

    混合精度在计算方法中结合了不同的数值精度。NVIDIA Volta架构和Turing架构的GPU引入了TensorCore,它在单精度数学管道上提供了显著的吞吐...

    GPUS Lady
  • OM5光纤跳线对比OM3/OM4有哪些优势?

    光通信中“OM”是指“Optical Multi-mode”,光模式,是多模光纤表示光纤等级的标准。目前,TIA和IEC定义的光纤跳线标准有OM1, OM2, ...

    亿源通科技HYC
  • Pandas-11. 文本操作

    悠扬前奏
  • 图解 Java 垃圾回收机制,写得非常好!

    自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。

    Java技术栈

扫码关注云+社区

领取腾讯云代金券