什么是 API
API(Application Programming Interface,應用程序編程接口)是一些預先定義的函數,目的是提供應用程序與開發人員基於某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內部工作機制的細節。
什么是 lumen
Lumen 是一個由 Laravel 組件搭建而成的微框架, 由 Laravel 官方維護. Lumen 為速度而生, 是當前最快的 PHP 框架之一, 甚至比類似的微框架 Silex 速度還要快.
從上面可以看出 Lumen 是去除了很多 配置和可自定義的選項的 Laravel。也就是說如果你先了解了 Laravel 就很容易掌握 lumen,在博客里有很多 laravel 的文章,大家可以搜一下去學習 。
用 lumen 開發 Api
首先要把 lumen 配置好,加入需要的 JWT,dingo 等組件。但在我們的項目中這些都是配置好的,這些你都不用擔心。
構建路由
打開項目目錄
app/Http/routes.php
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?php
$api = app('Dingo\Api\Routing\Router');
$api->version('v1.0', ['namespace' => 'App\Http\V1_0\Controllers'], function ($api) {
//物品分類列表
$api->get('category', 'CategoryController@index');
//驗證項目是否運行成功
$api->get('test', 'ApitestController@test');
// 需提供 JWT
$api->group(['middleware' => 'api.auth', 'providers' => 'jwt'], function ($api) {
});
});
|
上面是最初打開看到的界面,很多人可能不理解是什么意思。去看 lumen 文檔也和上面不太一樣。事實上上面並不是 lumen 的原生語法,上面用到的是 dingo API。可以去以下鏈接了解 dingo Wiki documentation。我在這里簡單介紹下。
|
1
2
|
$api->get('test', 'ApitestController@test');//訪問本地地址/api/test,調用的方法是 ApitestController 的 test 方法
|
而在這個里面
|
1
2
3
4
|
$api->group(['middleware' => 'api.auth', 'providers' => 'jwt'], function ($api) {
});
|
寫下的路由必須通過 JWT 驗證,就是必須要登錄獲取 token。大家可以去 JWT 官網或搜一下相關文章了解 token 機制。 jwt WIKI可以了解如何獲取和解析 token。
路由要遵循 restful url 規范。大家可以看下這篇文章 restful url
用到最多的是 laravel resource 路由
控制器
還記得上步里提到的那個路由嗎,在那個路由調用的是 ApitestController 的 test 方法。接下來我們就來寫一下這個控制器
打開項目目錄
app/Http/V1_0/Controllers,我們項目的控制器都寫在這個文件夾下,根據需要新建 ApitestController
|
1
2
3
4
5
6
7
8
9
10
|
<?php namespace App\Http\v1_0\Controllers;
class ApiTestController extends ApiController
{
public function test()
{
return $this->response()->array(['api 項目運行成功']);
}
}
|
在這里有個 test 方法,就是我們在上一步的路由中訪問的方法。也就是說當我們訪問本地地址/api/test 時就會回應 ‘api 項目運行成功’。到此我們的 API 經過的流程就基本完成了。不過可能會有很多同學會問數據庫呢?事實上數據庫也只是為這個 Api 提供數據而已。
數據庫
在這里我們將展示數據庫的數據如何在控制器中使用。首先新建 migration,大家參考這篇文章。有的時候還要填入數據,大家
參考這篇文章
然后我們要建立一個 Model。假設我們現在有一個 users 表。
打開 app/Entity 文件夾 新建文件 User.php
|
1
2
3
4
5
6
7
8
9
10
|
<?php namespace App\Entity;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $hidden = ['password'];
protected $fillable = ['nation_id', 'mobile'];
}
|
$fillable 是允許批量操作的白名單,具體的大家可以去看看官網。
接下來我們就可以使用 users 這個表了。方法改為
|
1
2
3
4
5
6
|
public function test()
{
$users = User::all();
return $this->response->collection($users, new UserTransformer);
}
|
在前面加上 use App\Entity\User;
這里用到了 Transformer,必須要新建個文件,可以看下這篇文章。如果不想建,可以直接 return $users;這樣當訪問連接時會返回 users 表的數據。了解更多,可以去看官方文檔的數據庫一節。很多時候為了方便,我們分離數據庫層,可以參考這篇文章。
總結
在這里我簡單介紹了下構建 API 的步驟,主要是給大家的學習帶來方便,文章里的鏈接和官方文檔,大家都可以看一下,相信你會很快學會的。如果你感覺文章有什么問題或者你還又什么困惑的話,歡迎大家在下面留言。附laravel 學習資源大全
