# laravel_api
**Repository Path**: chenbool/laravel_api
## Basic Information
- **Project Name**: laravel_api
- **Description**: laravel5.8
- **Primary Language**: PHP
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-08-24
- **Last Updated**: 2026-04-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

## Laravel API 项目
基于 Laravel 5.8 开发的 RESTful API 项目,提供用户认证和用户信息管理功能。
## 目录
- [技术栈](#技术栈)
- [功能特性](#功能特性)
- [环境要求](#环境要求)
- [安装部署](#安装部署)
- [数据库配置](#数据库配置)
- [API 接口文档](#api-接口文档)
- [项目结构](#项目结构)
- [核心模块说明](#核心模块说明)
- [错误码说明](#错误码说明)
- [常用命令](#常用命令)
- [注意事项](#注意事项)
## 技术栈
- **PHP**: ^7.1.3
- **Laravel**: 5.8.*
- **JWT 认证**: chenbool/jwt ^1.0
- **数据库**: MySQL (可通过 config/database.php 配置)
## 功能特性
### API 接口
| 接口 | 方法 | 说明 | 认证 |
|------|------|------|------|
| `/api/` | GET | 欢迎接口 | 否 |
| `/api/login` | POST | 用户登录 | 否 |
| `/api/token` | GET | 获取 Token | 否 |
| `/api/user` | GET | 获取用户信息 | 是 |
### 用户模块
- 用户登录(手机号 + 密码)
- JWT Token 认证
- 用户信息查询(包含 id, phone, nick_name, avatar_url, gender, city, province, balance)
## 环境要求
- PHP >= 7.1.3
- OpenSSL PHP Extension
- PDO PHP Extension
- Mbstring PHP Extension
- Tokenizer PHP Extension
- XML PHP Extension
- Composer
- MySQL 5.7+ 或 MariaDB 10.1+
## 安装部署
### 1. 克隆项目
```bash
git clone
cd laravel_api
```
### 2. 安装依赖
```bash
composer install
```
> 如果遇到内存限制问题,运行:`composer install --ignore-platform-reqs`
### 3. 配置环境变量
```bash
cp .env.example .env
```
### 4. 生成应用密钥
```bash
php artisan key:generate
```
### 5. 配置数据库连接
编辑 `.env` 文件:
```
APP_NAME=LaravelAPI
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost:8000
# 数据库配置
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_api
DB_USERNAME=root
DB_PASSWORD=
# JWT 密钥(使用 APP_KEY)
JWT_SECRET=your_jwt_secret_key
```
### 6. 创建数据库
```bash
mysql -u root -p -e "CREATE DATABASE laravel_api CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
```
### 7. 运行数据库迁移
```bash
php artisan migrate
```
### 8. 启动服务
```bash
php artisan serve
```
服务启动后,访问 `http://localhost:8000/api/` 可看到欢迎信息。
## 数据库配置
### 用户表 (user)
由于项目使用自定义表名 `user`,需要创建对应的数据表。建议的表结构如下:
```sql
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`phone` varchar(20) NOT NULL COMMENT '手机号',
`password` varchar(32) NOT NULL COMMENT '密码(MD5)',
`nick_name` varchar(50) DEFAULT NULL COMMENT '昵称',
`avatar_url` varchar(255) DEFAULT NULL COMMENT '头像URL',
`gender` tinyint(1) DEFAULT 0 COMMENT '性别: 0-未知, 1-男, 2-女',
`city` varchar(50) DEFAULT NULL COMMENT '城市',
`province` varchar(50) DEFAULT NULL COMMENT '省份',
`balance` decimal(10,2) DEFAULT 0.00 COMMENT '余额',
`token` varchar(255) DEFAULT NULL COMMENT 'JWT Token',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `phone` (`phone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
```
> 注意:表名在 `app/Model/User.php` 中已配置为 `user`,且 `timestamps` 设置为 `false`。
## API 接口文档
### 1. 欢迎接口
**请求**
```http
GET /api/
```
**响应**
```
hi! welcome to shop
```
---
### 2. 用户登录
**请求**
```http
POST /api/login
Content-Type: application/json
{
"phone": "13800138000",
"password": "your_password"
}
```
**参数说明**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| phone | string | 是 | 手机号 |
| password | string | 是 | 密码(MD5加密) |
**成功响应**
```json
{
"code": 0,
"msg": "登录成功",
"result": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"iss": "http://localhost",
"exp": "2024-xx-xx xx:xx:xx",
"exp_time": "2024-xx-xx xx:xx:xx",
"user": {
"id": 1,
"phone": "13800138000",
"nick_name": "用户名",
"avatar_url": "",
"gender": 0,
"city": "",
"province": "",
"balance": 0
}
}
}
```
**错误响应 - 用户不存在**
```json
{
"code": -10,
"msg": "你还没有注册",
"result": {}
}
```
**错误响应 - 密码错误**
```json
{
"code": -10,
"msg": "密码错误",
"result": {}
}
```
---
### 3. 获取 Token
**请求**
```http
GET /api/token
```
**响应**
```json
{
"code": 0,
"msg": "获取成功",
"result": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"iss": "http://localhost",
"exp": "2024-xx-xx xx:xx:xx",
"exp_time": "2024-xx-xx xx:xx:xx"
}
}
```
---
### 4. 获取用户信息
**请求**
```http
GET /api/user?token=your_jwt_token
```
**参数说明**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| token | string | 是 | JWT Token |
**响应**
```json
{
"code": 0,
"msg": "查询成功",
"result": [
{
"id": 1,
"phone": "13800138000",
"nick_name": "用户名",
"avatar_url": "",
"gender": 0,
"city": "",
"province": "",
"balance": 0
}
]
}
```
**未登录响应**
```json
{
"code": -100,
"msg": "你还没有登陆",
"result": {}
}
```
---
## 项目结构
```
laravel_api/
├── app/ # 应用核心代码
│ ├── Console/ # 控制台命令
│ │ └── Kernel.php # 控制台内核
│ ├── Exceptions/ # 异常处理
│ │ └── Handler.php # 异常处理器
│ ├── Helpers/ # 辅助函数
│ │ └── functions.php # 公共函数
│ ├── Http/
│ │ ├── Controllers/
│ │ │ ├── Api/ # API 控制器
│ │ │ │ ├── LoginController.php # 登录控制器
│ │ │ │ └── UserController.php # 用户控制器
│ │ │ ├── Auth/ # 认证控制器( Laravel Breeze 等)
│ │ │ └── Controller.php # 基础控制器
│ │ └── Middleware/ # 中间件
│ ├── Model/ # 数据模型
│ │ └── User.php # 用户模型
│ └── Providers/ # 服务提供者
├── bootstrap/ # 启动文件
│ └── app.php # 应用启动
├── config/ # 配置文件
│ ├── app.php # 应用配置
│ ├── database.php # 数据库配置
│ ├── auth.php # 认证配置
│ └── ... # 其他配置
├── database/
│ ├── migrations/ # 数据库迁移
│ ├── seeds/ # 数据种子
│ └── factories/ # 模型工厂
├── public/ # 公共入口
├── resources/ # 资源文件
├── routes/ # 路由定义
│ ├── api.php # API 路由
│ ├── web.php # Web 路由
│ ├── console.php # 控制台路由
│ └── channels.php # 频道路由
├── storage/ # 存储目录
├── tests/ # 测试文件
├── .env # 环境配置
├── artisan # CLI 入口
├── composer.json # 依赖配置
└── phpunit.xml # 测试配置
```
## 核心模块说明
### 1. 辅助函数 (app/Helpers/functions.php)
项目定义了一些全局辅助函数:
| 函数 | 说明 |
|------|------|
| `json($data)` | 将数据转换为 JSON 响应 |
| `returnJson($msg, $code, $data)` | 返回 JSON 响应(统一格式) |
| `jwt_encode($key)` | 生成 JWT Token |
| `jwt_decode($jwt, $key)` | 解密 JWT Token |
**returnJson 使用示例**
```php
// 成功响应
returnJson('登录成功', 0, $data);
// 错误响应
returnJson('参数错误', -1);
```
**jwt_encode 返回格式**
```php
[
'token' => 'eyJ0eXAiOiJKV1Qi...', // JWT Token
'iss' => 'http://localhost', // 签发者
'exp' => 1234567890, // 过期时间戳
'exp_time' => '2024-01-01 12:00:00' // 过期时间格式化
]
```
### 2. 用户模型 (app/Model/User.php)
```php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $table = 'user'; // 自定义表名
public $timestamps = false; // 关闭自动时间戳
}
```
### 3. 中间件 (app/Http/Middleware/Api.php)
API 请求中间件,用于处理请求验证和过滤。
## 错误码说明
| 错误码 | 说明 |
|--------|------|
| 0 | 成功 |
| -1 | 通用错误 |
| -10 | 登录错误(用户不存在或密码错误) |
| -100 | 未登录 |
| -500 | 服务器错误 |
## 常用命令
### 开发相关
```bash
# 启动开发服务器
php artisan serve
# 启动开发服务器(指定端口)
php artisan serve --port=8080
# 监听文件变化自动重启(需安装 composer require barryvdh/laravel-reflexr)
php artisan reflexr
```
### 数据库相关
```bash
# 创建迁移文件
php artisan make:migration create_users_table
# 运行迁移
php artisan migrate
# 回滚上一次迁移
php artisan migrate:rollback
# 回滚所有迁移
php artisan migrate:reset
# 填充数据
php artisan db:seed
```
### 缓存相关
```bash
# 清除配置缓存
php artisan config:clear
# 清除路由缓存
php artisan route:clear
# 清除视图缓存
php artisan view:clear
# 清除所有缓存
php artisan cache:clear
```
### 其他
```bash
# 生成应用密钥
php artisan key:generate
# 查看路由列表
php artisan route:list
# 创建控制器
php artisan make:controller Api/UserController
```
## 注意事项
### 1. 安全性
- 生产环境请将 `.env` 文件加入 `.gitignore`
- 生产环境设置 `APP_DEBUG=false`
- 使用 HTTPS 加密传输
- 定期更换 JWT 密钥
### 2. Token 有效期
- 当前 Token 有效期为 **2 小时**(7200秒)
- 可在 `app/Helpers/functions.php` 中修改 `jwt_encode` 函数的 `$token['exp']` 值
### 3. 密码存储
- 当前使用 MD5 加密存储密码
- 生产环境建议使用 bcrypt 或 argon2 加密
### 4. 生产环境部署
```bash
# 优化自动加载
composer install --optimize-autoloader --no-dev
# 清除缓存
php artisan config:cache
php artisan route:cache
php artisan view:cache
```
## 常见问题
### Q1: 登录返回 "你还没有注册"?
**解决**:确认数据库 `user` 表中是否存在对应手机号的记录。
### Q2: Token 过期后如何处理?
**解决**:用户需要重新调用登录接口获取新的 Token。
### Q3: 如何修改 JWT 过期时间?
**解决**:编辑 `app/Helpers/functions.php` 文件中 `jwt_encode` 函数的 `$token['exp']` 值。
### Q4: 跨域请求失败?
**解决**:可以在 `app/Http/Middleware/Api.php` 中添加 CORS 头部,或使用 Laravel CORS 扩展包。
## License
The Laravel framework is open-source software licensed under the [MIT license](https://opensource.org/licenses/MIT).