安装laravel
这里选用安装8版本
在项目目录执行
1
| composer create-project --prefer-dist laravel/laravel=8.* api-test
|
等待安装好后,进入api-test
目录执行:
提示
就说明启动项目成功,可以浏览器访问地址。
配置统一化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
项中加入:

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

配置数据库连接信息
修改根目录.env
文件,把连接信息改成自己的数据库连接信息
1 2 3 4 5 6
| DB_CONNECTION=mysql DB_HOST=数据库连接地址 DB_PORT=3306 DB_DATABASE=数据库名 DB_USERNAME=连接账号 DB_PASSWORD=连接密码
|
以下以表Student为案例

创建实体类(模型层)
在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;
class Student extends Model //记得继承Model类 { protected $table = 'student'; protected $primaryKey = 'id'; protected $fillable = ['student_id','username','password','email','gender','birthday']; public $timestamps = 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;
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
| Route::get('test','\App\Http\Controllers\StudentController@test');
|
然后浏览器访问,项目地址/api/test 便可以查看到结果:

至此一个接口的完整流程结束,下面来示范常见接口案例:
接口示例一:获取列表
在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
|
public function getStudentList(){ $studentModel = new Student();
$pageSize = request()->input('pageSize',10);
$params = request()->only(['student_id','username','password','email','gender','birthday']);
$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参数及说明
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|
gender | 1 | Text | 否 | 性别 |
page | 1 | Text | 否 | 分页页码,数字类型 |
pageSize | 10 | Text | 否 | 分页大小,一页数据数量 |

接口示例二:根据ID查询单个对象
在app/Http/Controllers/StudentController.php
中新增一个方法:
1 2 3 4 5 6 7 8 9 10 11 12
|
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上
比如:/student/15

接口示例三:根据多条件获取单个对象
在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
|
public function getStudent(){
$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');
|
接口调用
请求参数
Query参数及说明
参数名 | 示例值 | 参数类型 | 是否必填 | 参数描述 |
---|
student_id | 16698 | Text | 否 | - |
password | 123456 | Text | 否 | 密码 |

接口实例四:新增数据
在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
|
public function addStudent() { $data = request()->only(['student_id','username','password','email','gender','birthday']);
$studentModel = new Student(); $student = $studentModel->create($data);
if(!$student){ 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_id | 10001 | Text | 是 | 学号 |
username | 张三 | Text | 是 | 用户名 |
password | 123456 | Text | 是 | 密码 |

接口实例五:修改数据
在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
|
public function updateStudent($id){
$data = request()->only(['student_id','username','password','email','gender','birthday']);
$studentModel = new Student(); $student = $studentModel->where(['id' => $id])->first();
if(!$student){ return api_response(false,10003,'无该学生'); }
$flag = $student->update($data); if(!$flag){ 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 | 否 | 用户名 |

接口实例六:删除数据
在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
|
public function delStudent($id){ $studentModel = new Student(); $student = $studentModel->where(['id' => $id])->first(); if(!$student){ return api_response(false,10003,'无该学生'); } $flag = $student->delete(); if(!$flag){ 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

案例总代码
实体类(模型)
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;
class Student extends Model //记得继承Model类 { protected $table = 'student'; protected $primaryKey = 'id'; protected $fillable = ['student_id','username','password','email','gender','birthday']; public $timestamps = 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;
class StudentController extends Controller //记得继承Controller { public function test(){ return api_response(true,0,'测试成功'); }
public function getStudentList(){ $studentModel = new Student();
$pageSize = request()->input('pageSize',10);
$params = request()->only(['student_id','username','password','email','gender','birthday']);
$studentList = $studentModel->where($params)->paginate($pageSize);
return api_response(true,0,'查询成功',$studentList); }
public function getStudentById($id){ $studentModel = new Student(); $student = $studentModel->where(['id' => $id])->first(); return api_response(true,'0','查询成功',$student); }
public function getStudent(){
$params = request()->only(['id','student_id','username','password','email','gender','birthday']);
if(empty($params)){ return api_response(false,10001,'数据不完整'); }
$studentModel = new Student(); $student = $studentModel->where($params)->first(); return api_response(true,0,'查询成功',$student); }
public function addStudent() { $data = request()->only(['student_id','username','password','email','gender','birthday']);
$studentModel = new Student(); $student = $studentModel->create($data);
if(!$student){ return api_response(false,30001,'新增失败'); } return api_response(true,0,'新增成功',$student); }
public function updateStudent($id){
$data = request()->only(['student_id','username','password','email','gender','birthday']);
$studentModel = new Student(); $student = $studentModel->where(['id' => $id])->first();
if(!$student){ return api_response(false,10003,'无该学生'); }
$flag = $student->update($data); if(!$flag){ return api_response(false,30001,'修改失败'); } return api_response(true,0,'修改成功'); }
public function delStudent($id){ $studentModel = new Student(); $student = $studentModel->where(['id' => $id])->first(); if(!$student){ return api_response(false,10003,'无该学生'); } $flag = $student->delete(); if(!$flag){ 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;
Route::get('test','\App\Http\Controllers\StudentController@test');
Route::get('student/list','\App\Http\Controllers\StudentController@getStudentList');
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');
|