[TOC]
# 编写API接口
## 控制器
> 创建Book控制器`app/controller/Book.php`
输入控制器的内容,通过Db类的静态方法检索数据库表book中的全部记录并以json格式输出。
> 我们编写前后端分离的接口程序都以json格式返回数据结果。
~~~
<?php
namespace app\controller;
use app\BaseController;
use think\facade\Db;
class Book extends BaseController
{
public function getBookList()
{
// 获取数据集
$books = Db::name('book')->select();
$response = [
'errno' => 0,
'errmsg' => '',
'data' => $books
];
return json($response);
}
public function getBookInfo($id=0)
{
$book = Db::name('book')->where(['id'=>$id])->find();
if ($book){
$response = [
'errno' => 0,
'errmsg' => '',
'data' => $book
];
}else{
$response = [
'errno' => 1000,
'errmsg' => '没有满足条件的数据',
'data' => null
];
}
return json($response);
}
}
~~~
代码说明:
门面为容器中的(动态)类提供了一个静态调用接口,相比于传统的静态方法调用, 带来了更好的可测试性和扩展性,你可以为任何的非静态类库定义一个`facade`类。
## 使用RESTer工具测试接口
在FireFox浏览器中安装RESTer扩展插件,启动插件输入
~~~
http://localhost:8000/index.php?s=book/getBookInfo/id/1
~~~
![](https://img.kancloud.cn/25/a0/25a0839a7e6494ea02b9398d1e800fde_818x565.png)
如图所示,我们看到检索到的数据以JSON对象的形式返回。
~~~
{
"errno": 0,
"errmsg": "",
"data": {
"id": 1,
"title": "ThinkPHP 5框架原理与实战 ",
"author": "黑马程序员",
"publisher": "中国铁道出版社",
"pub_year": 2019,
"isbn": "9787113259716",
"price": "55.00"
}
}
~~~