安装laravel

这里选用安装8版本

在项目目录执行

1
composer create-project --prefer-dist laravel/laravel=8.* api-test

等待安装好后,进入api-test目录执行:

1
php artisan serve

提示image-20220512165615852

就说明启动项目成功,可以浏览器访问地址。

配置统一化api接口返回格式

根据统一化的api接口返回数据。我们先定义统一格式。

success : 程序业务逻辑是否执行成功

code:错误状态码,0为成功,其它错误码自定义

message:返回提示信息

data:数据包,即接口返回的数据

例如:

1
2
3
4
5
6
7
8
9
{
"success":true,
"code":0,
"message":"查询成功",
"data":{
"id":1,
"name":"张三"
}
}

app目录创建目录Commom并创建文件:common.php

1
2
3
4
5
6
<?php
// 应用公共文件

function api_response($success,$code = 0,$message = '',$data = []){
return json_encode(compact('success','code', 'message', 'data'));
}

然后编辑根目录下的composer.json文件

autoload项中加入:

image-20220512170230551

然后在项目目录下命令行执行自动加载命令:

1
composer dump-auto

image-20220512183053900

配置数据库连接信息

修改根目录.env文件,把连接信息改成自己的数据库连接信息

1
2
3
4
5
6
DB_CONNECTION=mysql
DB_HOST=数据库连接地址
DB_PORT=3306
DB_DATABASE=数据库名
DB_USERNAME=连接账号
DB_PASSWORD=连接密码

以下以表Student为案例

image-20220512183641672

创建实体类(模型层)

app/Models目录下创建实体类Student.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

/**
* 孤鸿渺影
* 2022/5/12 18:37
* Student
*/
class Student extends Model //记得继承Model
{
protected $table = 'student'; //即该实体类对应数据库的表名
protected $primaryKey = 'id'; //对应数据表中的主键
protected $fillable = ['student_id','username','password','email','gender','birthday']; //即允许操作数据表的字段列表,一般为主键之外的字段
public $timestamps = false; //由于我们不需要laravel帮助我们管理created_at、updated_at、deleted_at等三个操作时间,所以我们要设置成false

}

创建控制器

app/Http/Controllers目录中创建控制器StudentController.php

并创建方法test,即一个api接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

namespace App\Http\Controllers;

/**
* 孤鸿渺影
* 2022/5/12 18:42
* StudentController
*/
class StudentController extends Controller //记得继承Controller
{
public function test(){
return api_response(true,0,'测试成功');
}

}

建立路由

app/routes/api.php中新增路由:

Route::any()为所有请求方式

Route::get()为GET请求方式

Route::post()为POST请求方式

Route::patch()为PATCH请求方式

Route::delete()为DELETE请求方式

1
2
3
//第一个参数为访问的路径,第二个参数为 控制器@方法名    即把test指向StudentController控制器的test方法
Route::get('test','\App\Http\Controllers\StudentController@test');

然后浏览器访问,项目地址/api/test 便可以查看到结果:

image-20220512194731722

至此一个接口的完整流程结束,下面来示范常见接口案例:

接口示例一:获取列表

app/Http/Controllers/StudentController.php中新增一个方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* 获取学生列表
* @date : 2022/5/12 22:02
* @return false|string
* @author : 孤鸿渺影
*/
public function getStudentList(){
$studentModel = new Student();

//分页数目,即一页几条数据
$pageSize = request()->input('pageSize',10);

//获取传参,only只获取某几个字段,用来数据条件查询
$params = request()->only(['student_id','username','password','email','gender','birthday']);

/** @var $studentModel Builder */
$studentList = $studentModel->where($params)->paginate($pageSize);

return api_response(true,'0','查询成功',$studentList);
}

app/routes/api.php中新增路由:

1
Route::get('student/list','\App\Http\Controllers\StudentController@getStudentList');

接口调用

  • 接口URL: /student/list
  • 请求方式: GET

请求参数

Query参数及说明

参数名示例值参数类型是否必填参数描述
gender1Text性别
page1Text分页页码,数字类型
pageSize10Text分页大小,一页数据数量

image-20220512221403837

接口示例二:根据ID查询单个对象

app/Http/Controllers/StudentController.php中新增一个方法:

1
2
3
4
5
6
7
8
9
10
11
12
/**
* 根据ID获取学生信息
* @date : 2022/5/12 22:18
* @param $id
* @return false|string
* @author : 孤鸿渺影
*/
public function getStudentById($id){
$studentModel = new Student();
$student = $studentModel->where(['id' => $id])->first();
return api_response(true,'0','查询成功',$student);
}

app/routes/api.php中新增路由:

1
Route::get('student/{id}','\App\Http\Controllers\StudentController@getStudentById');

接口调用

该接口为restful风格的接口,参数在url上

  • 接口URL: /student/{id}

比如:/student/15

image-20220512221953280

接口示例三:根据多条件获取单个对象

app/Http/Controllers/StudentController.php中新增一个方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* 根据多个条件查找学生
* @date : 2022/5/12 22:25
* @return false|string
* @author : 孤鸿渺影
*/
public function getStudent(){

//获取传参,only只获取某几个字段,用来数据条件查询
$params = request()->only(['id','student_id','username','password','email','gender','birthday']);

//当一个参数不传时,直接返回错误
if(empty($params)){
return api_response(false,404,'数据不完整');
}

$studentModel = new Student();
$student = $studentModel->where($params)->first();
return api_response(true,0,'查询成功',$student);
}

app/routes/api.php中新增路由:

1
Route::get('student','\App\Http\Controllers\StudentController@getStudent');

接口调用

  • 接口URL: /student

  • 请求方式: GET

请求参数

Query参数及说明

参数名示例值参数类型是否必填参数描述
student_id16698Text-
password123456Text密码

image-20220512222840487

接口实例四:新增数据

app/Http/Controllers/StudentController.php中新增一个方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* 新增学生
* @date : 2022/5/12 22:33
* @return false|string
* @author : 孤鸿渺影
*/
public function addStudent()
{
//获取传参,only只获取某几个字段,用来数据条件查询
$data = request()->only(['student_id','username','password','email','gender','birthday']);

//这里可以验证数据,比如哪些数据必填等等,这里就不做演示

$studentModel = new Student();
$student = $studentModel->create($data);

if(!$student){
//状态码自己定义,这里是执行失败为30001
return api_response(false,30001,'新增失败');
}
return api_response(true,0,'新增成功',$student);
}

app/routes/api.php中新增路由:

这里为为restful风格的接口,访问路径与上一个获取单个对象接口路径一样,不同的是请求方式不同,这里是POST请求方式

1
Route::post('student','\App\Http\Controllers\StudentController@addStudent');

接口调用

  • 接口URL: http://127.0.0.1:11501/api/student
  • 请求方式: POST

请求参数

body参数及说明

参数名示例值参数类型是否必填参数描述
student_id10001Text学号
username张三Text用户名
password123456Text密码

image-20220512223549667

接口实例五:修改数据

app/Http/Controllers/StudentController.php中新增一个方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* 修改学生
* @date : 2022/5/12 22:38
* @param $id
* @return false|string
* @author : 孤鸿渺影
*/
public function updateStudent($id){

//获取传参,only只获取某几个字段,用来数据条件查询
$data = request()->only(['student_id','username','password','email','gender','birthday']);

//这里可以验证数据,比如哪些数据必填等等,这里就不做演示


$studentModel = new Student();
$student = $studentModel->where(['id' => $id])->first();

if(!$student){
//状态码自己定义,这里是数据不存在为10003
return api_response(false,10003,'无该学生');
}

$flag = $student->update($data);//执行修改
if(!$flag){
//状态码自己定义,这里是执行失败为30001
return api_response(false,30001,'修改失败');
}
return api_response(true,0,'修改成功');
}

app/routes/api.php中新增路由:

这里为为restful风格的接口,访问路径与根据id获取数据接口路径一样,不同的是请求方式不同,这里是PATCH请求方式

1
Route::patch('student/{id}','\App\Http\Controllers\StudentController@updateStudent');

接口调用

  • 接口URL: /student/{id}
  • 请求方式: PATCH

请求参数

** body参数及说明**

参数名示例值参数类型是否必填参数描述
username李四Text用户名

image-20220512224141067

接口实例六:删除数据

app/Http/Controllers/StudentController.php中新增一个方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* 删除学生
* @date : 2022/5/12 22:43
* @param $id
* @return false|string
* @author : 孤鸿渺影
*/
public function delStudent($id){
$studentModel = new Student();
$student = $studentModel->where(['id' => $id])->first();
if(!$student){
//状态码自己定义,这里是数据不存在为10003
return api_response(false,10003,'无该学生');
}
$flag = $student->delete();
if(!$flag){
//状态码自己定义,这里是执行失败为30001
return api_response(false,30001,'删除失败');
}
return api_response(true,0,'删除成功');
}

app/routes/api.php中新增路由:

1
Route::delete('student/{id}','\App\Http\Controllers\StudentController@delStudent');

这里为为restful风格的接口,访问路径与根据id获取数据、修改数据接口路径一样,不同的是请求方式不同,这里是DELETE请求方式

接口调用

  • 接口URL: /student/{id}
  • 请求方式: DELETE

image-20220512224553664

案例总代码

实体类(模型)

app/Models/Student.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

/**
* 孤鸿渺影
* 2022/5/12 18:37
* Student
*/
class Student extends Model //记得继承Model
{
protected $table = 'student'; //即该实体类对应数据库的表名
protected $primaryKey = 'id'; //对应数据表中的主键
protected $fillable = ['student_id','username','password','email','gender','birthday']; //即允许操作数据表的字段列表,一般为主键之外的字段
public $timestamps = false; //由于我们不需要laravel帮助我们管理created_at、updated_at、deleted_at等三个操作时间,所以我们要设置成false

}

控制器

app/Http/Controllers/StudentController.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<?php

namespace App\Http\Controllers;

use App\Models\Student;
use Illuminate\Database\Eloquent\Builder;

/**
* 孤鸿渺影
* 2022/5/12 18:42
* StudentController
*/
class StudentController extends Controller //记得继承Controller
{
public function test(){
return api_response(true,0,'测试成功');
}

/**
* 获取学生列表
* @date : 2022/5/12 22:02
* @return false|string
* @author : 孤鸿渺影
*/
public function getStudentList(){
$studentModel = new Student();

//分页数目,即一页几条数据
$pageSize = request()->input('pageSize',10);

//获取传参,only只获取某几个字段,用来数据条件查询
$params = request()->only(['student_id','username','password','email','gender','birthday']);

/** @var $studentModel Builder */
$studentList = $studentModel->where($params)->paginate($pageSize);

return api_response(true,0,'查询成功',$studentList);
}

/**
* 根据ID获取学生信息
* @date : 2022/5/12 22:18
* @param $id
* @return false|string
* @author : 孤鸿渺影
*/
public function getStudentById($id){
$studentModel = new Student();
$student = $studentModel->where(['id' => $id])->first();
return api_response(true,'0','查询成功',$student);
}

/**
* 根据多个条件查找学生
* @date : 2022/5/12 22:25
* @return false|string
* @author : 孤鸿渺影
*/
public function getStudent(){

//获取传参,only只获取某几个字段,用来数据条件查询
$params = request()->only(['id','student_id','username','password','email','gender','birthday']);

//当一个参数不传时,直接返回错误
if(empty($params)){
//状态码自己定义,这里是数据验证失败为10001
return api_response(false,10001,'数据不完整');
}

$studentModel = new Student();
$student = $studentModel->where($params)->first();
return api_response(true,0,'查询成功',$student);
}

/**
* 新增学生
* @date : 2022/5/12 22:33
* @return false|string
* @author : 孤鸿渺影
*/
public function addStudent()
{
//获取传参,only只获取某几个字段,用来数据条件查询
$data = request()->only(['student_id','username','password','email','gender','birthday']);

//这里可以验证数据,比如哪些数据必填等等,这里就不做演示

$studentModel = new Student();
$student = $studentModel->create($data);

if(!$student){
//状态码自己定义,这里是执行失败为30001
return api_response(false,30001,'新增失败');
}
return api_response(true,0,'新增成功',$student);
}

/**
* 修改学生
* @date : 2022/5/12 22:38
* @param $id
* @return false|string
* @author : 孤鸿渺影
*/
public function updateStudent($id){

//获取传参,only只获取某几个字段,用来数据条件查询
$data = request()->only(['student_id','username','password','email','gender','birthday']);

//这里可以验证数据,比如哪些数据必填等等,这里就不做演示


$studentModel = new Student();
$student = $studentModel->where(['id' => $id])->first();

if(!$student){
//状态码自己定义,这里是数据不存在为10003
return api_response(false,10003,'无该学生');
}

$flag = $student->update($data);//执行修改
if(!$flag){
//状态码自己定义,这里是执行失败为30001
return api_response(false,30001,'修改失败');
}
return api_response(true,0,'修改成功');
}


/**
* 删除学生
* @date : 2022/5/12 22:43
* @param $id
* @return false|string
* @author : 孤鸿渺影
*/
public function delStudent($id){
$studentModel = new Student();
$student = $studentModel->where(['id' => $id])->first();
if(!$student){
//状态码自己定义,这里是数据不存在为10003
return api_response(false,10003,'无该学生');
}
$flag = $student->delete();
if(!$flag){
//状态码自己定义,这里是执行失败为30001
return api_response(false,30001,'删除失败');
}
return api_response(true,0,'删除成功');
}
}


路由

app/routes/api.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

use Illuminate\Support\Facades\Route;



//第一个参数为访问的路径,第二个参数为 控制器@方法名 即把test指向StudentController控制器的test方法
Route::get('test','\App\Http\Controllers\StudentController@test');

//获取学生列表
Route::get('student/list','\App\Http\Controllers\StudentController@getStudentList');
//根据id获取学生
Route::get('student/{id}','\App\Http\Controllers\StudentController@getStudentById');
//根据多个条件获取学生
Route::get('student','\App\Http\Controllers\StudentController@getStudent');
//新增学生
Route::post('student','\App\Http\Controllers\StudentController@addStudent');
//修改学生
Route::patch('student/{id}','\App\Http\Controllers\StudentController@updateStudent');
//删除学生
Route::delete('student/{id}','\App\Http\Controllers\StudentController@delStudent');