Dingo API - 如何在url中添加版本号?

时间:2016-07-29 17:16:01

标签: php laravel laravel-5.2 dingo-api

我刚刚安装了Dingo,它似乎可以使用以下网址:

http://website.dev/api/test

http://website.dev/api/hello

$api = app('Dingo\Api\Routing\Router');
    $api->version('v1', function ($api) {

        $api->get('test', function () {
            return 'Test';
        });

        $api->get('hello', function () {
            return 'Hello';
        });

    });

我希望版本v1包含在URL中,如何让它工作? 当我尝试:

http://website.dev/api/v1/test

我收到错误:

{
"message": "404 Not Found",
"status_code": 404
}

.env文件中,我有:API_PREFIX=api

根据Dingo Configuration

  

避免将版本号作为前缀或子域名   版本控制通过Accept标头处理。

2 个答案:

答案 0 :(得分:4)

dingoAPI的版本不能以这种方式工作。因为它们不是在URI中对API进行版本控制,所以您需要定义Accept标头以请求特定版本。标题的格式如下:

Accept: application/vnd.YOUR_SUBTYPE.v1+json

要访问该版本,您需要一个HTTP客户端,如postman

答案 1 :(得分:3)

要解决dingo版本方案,可以在version方法中使用路由组,并忽略accept标头。像这样:

<?php

use Illuminate\Http\Request;

$api = app('Dingo\Api\Routing\Router');


$api->version('v1', function ($api) { // Always keep this to v1, and ignore accept header.

    $api->group(['prefix' => 'v1'], function ($api) { // Use this route group for v1

        $api->get('/', function () {
            return 'Look v1!';
        });

    });


    $api->group(['prefix' => 'v2'], function ($api) { // Use this route group for v2

        $api->get('/', function () {
            return 'Look v2!' ;
        });

    });

});