「 原创 」Laravel 5.8 API 开发实战(一)

Laravel 为何?我就不细说了,可以自行查看官网 https://laravel.com/,具体如何安装,也可以查看官网安装教程,再此亦不赘述。

本篇主要讲述,如何用 Laravel 快速开发 API,跑通无授权的接口。

数据库配置

打开 .env 文件,修改数据库配置信息。config / database.php 可以配置 prefix ,charset 等信息(根据自身需求,修改 MySQL 数据库信息 [ 数据库,用户名,密码 ] )

<code>DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=makeit DB_USERNAME=root DB_PASSWORD=123456/<code>

数据表设计

所有表的设计默认都放在 database / migrations 目录下,laravel 默认安装后为我们创建了 user 与 password_resets 两张表。

运行 php artisan migrate 命令,出现 Migrated 则表示正常运行的,数据表创建成功。

如果出现如下图所示的内容,则表示有部分表创建失败了(user 表是成功的了)

出现该错误的原因是 Laravel 5.4 之后修改了数据库默认字符集,现在是 utf8mb4。上述错误的解决方案有 2 种(如下图所示 - 第一种方案看图片标题):

修改 app/Providers/AppServiceProvider.php

第二种方案为 修改 config/database.php 配置 选项,将 MySQL 的 engine 默认为 null 的修改为 InnoDB。(参考资料:https://laravel-news.com/laravel-5-4-key-too-long-error)

<code>'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'restaurant'), 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => 'InnoDB', 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ]/<code>

接下来创建一个新的数据表,运行 php artisan make:model Platforms -m,创建新数据表 platforms(当然,也可以手动在 database/migrations 目录下新建)。

创建新数据表 platforms

依葫芦画瓢,根据默认提供的 users 表,创建 platforms 表字段

<code>Schema::create('platforms', function(Blueprint $table) { $table->increments('id')->comment('平台ID'); $table->string('key')->comment('平台密钥'); $table->string('name')->comment('平台名称'); $table->tinyInteger('open')->default(0)->comment('是否开启'); $table->timestamps(); });/<code>

实现简单接口

首先当然得先启动服务器

<code>php artisen serve/<code>

紧接着创建一控制器(如下的命令,会在 Http/Controllers 目录下创建 Api/v1 目录,并生成 UserController 控制器)

<code>php artisan make:controller Api\v1\UserController/<code>

创建完控制器后,我们来改改这个控制器,新增一个 index 方法,并使其返回 Json 数据。

<code>json([ 'data' => [], 'ret' => [] ]); } }/<code>

控制器有了,接下来要访问,我们要修改路由文件,增加一条简单路由,使其能正常访问,具体修改如下所示:

<code> 'v1'], function(Registrar $api) { $api->get('/user', 'Api\v1\UserController@index'); });/<code>

上述修改路由,有另外一种方式可以修改 action 参数,该方式需要修改 RouteServiceProvider 服务提供器,去除 api 的 namespace 指定。

<code> 'v1'], function(Registrar $api) { $api->get('/user', Api\UserController::class.'@index'); });/<code>

去除 api 的 namespace 指定

接口测试验证

浏览器输入:http://localhost:8000/api/v1/user

或者采用第三方工具 postman,restlet 等进行接口访问测试。

至此,一个无授权认证的基于 Larave 5.8 的接口就跑通了 ......

那需要授权认证的接口又该如何实现呢?