26

介绍

在开发后台接口现在更多的企业选择了PHP来开发后台接口 当然PythonNodeJs不失为是一种不错的选择

不过这里就以PHP为例 基于Laravel框架开发后台API 这里也是如果你是从事其他方向想做一些后台API开发 都可以去尝试一下的

当然实例项目我会不放在我的github上仅供参考 @geekGhc

github demo地址 https://github.com/GeekGhc/dingo-api-demo

前期准备

当然前提是安装PHP的环境 因为PHP7无论是从性能还是以后的推广度都是首选

所以如果想去繁从简的话可以安装PHP的集成环境 这里可以XAMPP 这里给出下载地址

https://www.apachefriends.org/zh_cn/index.html 选择7.1版本安装即可

当然安装过程很简单 但要保证将PHP设置为环境变量 这样至少我们才可以使用php命令

安装结束后 终端执行

$ php --version

查看到对应的版本即可

接下来就是安装composer 这是PHP的安装依赖库 我们可以下载到我们需要的第三方依赖包

这里也给出相应的地址 https://getcomposer.org/doc/00-intro.md#downloading-the-composer-executable

对于不同的平台 安装方式肯定不一样 不过相对来说在windows环境下 可以下载完可执行文件直接安装即可 安装系统盘就行

安装完毕后确保composer依旧在环境变量中 在终端执行

$ composer -V

查看到对应的版本即可

这些关于PHP的安装完毕之后 那么基本就可以进入到Laravel的安装

Laravel安装

如果说没有接触过Laravel的话可以这两种方式其实都是不错的选择

1.通过Laravel安装工具

使用之前的composer下载Laravel安装包

$ composer global require "laravel/installer"

请确定你已将 ~/.composer/vendor/bin 路径加到 PATH,只有这样系统才能找到 laravel 的执行文件

一旦安装完成,就可以使用 laravel new 命令在指定目录创建一个新的 Laravel 项目,例如:laravel new blog

2.通过 Composer Create-Project

你也可以通过 Composer 在命令行运行 create-project 命令来安装 Laravel

$ composer create-project --prefer-dist laravel/laravel blog

Laravel API基本配置

为了后面的演示 这里我创建了一个新的项目

$ laravel new codespace-api

这里的项目名随意 这样可以安装到最近的版本

Sublime或者PHPStrom打开项目 打开.env文件
这里有一小段配置需要改下

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=codespace-api
DB_USERNAME=root
DB_PASSWORD=password

这里的后面信息就是修改我们连接的Mysql数据库的信息 包括数据库名 数据库用户名和密码

修改为你本地或者服务器上的数据即可

启动内置服务器服务

$ php artisan serve

简单了解Laravel的工作流程

因为这里我们只是作为后台开发 那么我们必须了解几下几点我们是需要学习和掌握的

  • 1.接口的书写规范和设计规则
  • 2.sql语句的编写和数据表的设计
  • 3.有关api的用户认证和token的了解

首先谈下第一个就是接口的书写规范和设计风格 这个其实在阮一峰的一个文章早就谈过 尽管会有点争议 对于学习

restful api的设计 还是很值得参考的

在了解了api的设计风格后 再结合我们平常所使用的第三方的api接口其实设计起来就是这样

不过接口的具体设计还是得根据客户端的项目需求而定

对于第二个sql语句的编写和数据表的设计 这个也就因人而异了 如果有多年的开发经验 我想一些sql查询 包括多表关联都是很好解决的

Laravel中只是语法的不同罢了 当然对于多表关联 在Laravel会有Eloquent Model对应的关系可以很好的解决 这里只谈就用原生的sql语句来编写我们的数据信息的话

这里可以需要阅读Laravel 的数据库操作文档(给出中文为了更好的说明 可以的话还是看看官方的英文文档比较好)

这里给出地址 http://d.laravel-china.org/docs/5.3/queries

这里可以找到关于操作数据库的一些sql语法

Laravel的数据表设计

在Laravel数据表的设计可以对应着Model 也可以单独创建 如果只是专注后台 可以创建我们需要的表

所有表的设计内容都是在database/migrations下 一开始是为我们创建了userspassword_resets表的

这里我们再去创建一个posts表的话 在项目终端执行

$ php artisan make:model Lesson -m

这样就可以创建我们所对应的lessons表 在这个migrations里也就是标的迁移文件写我们的lessons表的字段信息

php?start_inline=1
Schema::create('lessonss', function (Blueprint $table) {
    $table->increments('id');
    $table->string('title');
    $table->text('body');
    $table->boolean('free');
    $table->timestamps();
});

Laravel中我们可以去定义个字段的测试信息 也就是我们的Seeder

databases/factories/ModelFactory.php中加入posts表的字段

$factory->define(App\Lesson::class, function (Faker\Generator $faker) {
    return [
        'title' => $faker->sentence,
        'body' => $faker->paragraph,
        'free' => $faker->boolean()
    ];
});

定义完表的结构 那么接下来就是迁移我们的数据表 因为之前已经配置过数据库的相关信息 所以在项目根目录

$ php artisan migrate

回到数据库会看到我们的数据表
图片描述

再去生成20条测试数据 打开项目的目录终端打开tinker

$ php artisan thinerk;

指定命名空间

$ namespace App;

生成20条测试数据

$ factory(Lesson::class,20)->create();

回车即可生成20条测试数据 打开数据库在lessons表就可以看到

为了方便路由处理 我们去生成一个控制器 为了不和应用混淆 我们在App目录下 新建Api文件夹

并新建ControllersTransformer目录为了存放我们的控制器和处理字段返回

在Controllers目录下也新建我们的控制器基类 可以模仿着应用控制器里的

<?php

namespace App\Api\Controllers;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

下面的话我们在这里的控制器就可以继承这个基类

话不多说 生成我们的LessonsController 在命令行执行

$ php artisan make:controller App\\Api\\Controllers\\LessonsController

下面的可能就是集成Dingo apiJwt认证了 如果没有用过Laravel的也没有关系 可以结合下面我的博客文章

安装 dingo api

在composer.json文件里添加

"dingo/api": "1.0.*@dev"

接着在laravel项目的configapp.php去添加服务

'providers' => [
    Dingo\Api\Provider\LaravelServiceProvider::class
]

再去生成相应的配置文件

$ php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"

如果需要实现jwt 同样的也是去安装页面 安装这个package

"require": {
    "tymon/jwt-auth": "0.5.*"
}

添加对应的服务:

'Tymon\JWTAuth\Providers\JWTAuthServiceProvider'

当然也是需要去配置一下他的alias

'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class

生成配置文件

$ php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"

生成一个key

$ php artisan jwt:generate

当然在composer.json添加完依赖包 需要去下载相关的扩展包 即在项目终端执行 composer update

使用

这个时候我们是在开发的环境下 还需对Dingo进行相应的配置 在.env文件里

API_STANDARDS_TREE=vnd

添加前缀

API_PREFIX=api

填写版本 这个我们之前自己写测试的时候也是提供的v1以此来区别版本

API_VERSION=v1

开启Debug模式

API_DEBUG=true

关闭Script模式

API_STRICT=false 

这样的话我们安装就算已经完成了 具体的业务部分在另一篇文章 Laravel从零开发后台API(二)

文章涉及到用户的登录注册 以及我们之前注册好的Lessson Model的信息获取

参考我的博客文章


GeekGhc
566 声望71 粉丝

Never underestimate your power to change yourself