yii框架开发restful api应继承yii\rest\activecontroller自动绑定crud动作,配置urlmanager启用复数化路由(如/users)、正确设置$modelclass,通过response::event_before_send统一响应格式,模型中重写fields()控制字段,并显式声明$verbs支持options预检请求。

Yii特别适合做API接口服务,关键在于用对组件、配好规则、统一输出格式——不是靠手动拼JSON,而是靠框架机制自动处理。
用ActiveController快速暴露CRUD接口
继承yii\rest\ActiveController是最省力的方式,它自动绑定index/view/create/update/delete五个标准动作,只要模型是ActiveRecord,几乎不用写业务逻辑。
- 控制器中必须声明public $modelClass = 'app\models\User',路径要完整,不能漏命名空间
- URL路由需启用复数化:/users才有效,/user会404;配置urlManager时确保'pluralize' => true
- 若模型主键不是id(比如是uid),必须重写findModel()方法,否则GET /users/123查不到数据
让接口响应格式真正统一
不要在每个action里return ['success'=>true, 'data'=>$xxx],这样绕过序列化机制,丢失分页、状态码、关联嵌套等REST特性。应该统一拦截响应出口。
- 在应用初始化阶段绑定Response::EVENT_BEFORE_SEND事件,集中处理输出结构
- 根据请求是否带$_GET['callback']参数,自动切换JSON或JSONP格式
- 错误响应也走同一结构:{"success":false,"data":{"message":"xxx","code":404}}
- HTTP状态码统一转为200(除特殊场景外),把真实错误信息放进data字段,避免前端被跨域或拦截器误判
精准控制返回字段,兼顾安全与扩展性
字段过滤和增强必须放在模型的fields()方法里,而不是控制器中硬编码数组。
- 用unset($array['password_hash'])剔除敏感字段
- 加计算字段:'full_name' => function($model){ return $model->first_name.' '.$model->last_name; }
- 嵌套关联数据:'department' => function($model){ return $model->department; }(前提是已定义getDepartment())
- 不同接口需要不同字段?可在fields()中通过Yii::$app->requestedRoute判断当前路由动态返回
别让OPTIONS请求成为跨域拦路虎
浏览器发带Authorization或自定义Header的请求前,必先发OPTIONS预检。Yii2默认不响应它,不是CORS没开,是路由根本没匹配上。
- 控制器中显式声明动词支持:public $verbs = ['index' => ['GET', 'HEAD', 'OPTIONS']]
- 全局CORS配置中'Access-Control-Allow-Methods'必须包含OPTIONS
- Nginx/Apache需确认未拦截OPTIONS,必要时添加add_header Access-Control-Allow-Methods并移除limit_except限制
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











