所有 API 返回的數(shù)據(jù), 必須 使用 Laravel 自帶的 API 資源 進(jìn)行返回。
絕不 在 API 資源中寫業(yè)務(wù)邏輯。在 Service 層封裝邏輯,輸出數(shù)據(jù),Resource 層只做定制。
所有讀取邏輯,皆可封裝到 Service 層或者 Model 層,不應(yīng)該出現(xiàn)在 API Resources 層。
API Resources 層只負(fù)責(zé)確保返回?cái)?shù)據(jù)格式。以及確保 API 返回結(jié)構(gòu)的可溯性。
API Resources 必須使用顯性的數(shù)據(jù)結(jié)構(gòu),而非隱性。
? 隱性:
<?php
namespace App\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class AssetRateResource extends JsonResource
{
public function toArray($request): array
{
return $this->resource->toArray();
}
}
? 顯性:
<?php
namespace App\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class AssetRateResource extends JsonResource
{
public function toArray($request): array
{
return [
// 把所需字段一個(gè)個(gè)列出來
'asset_uuid' => $this->resource->asset_uuid,
'rate' => $this->resource->rate,
];
}
}
蛇形命名法 (snake case) 還是 駝峰命名法 (camel case)?
所有返回?cái)?shù)據(jù) 必須 使用 蛇形命名法。接受請(qǐng)求的數(shù)據(jù),也 必須 使用蛇形命名法。
? 駝峰:
{
"userType": "robot",
"avatarUrls": [
"https://cdn.image.com/r9Z7phw4sFWwi-7YVqSiXuLo0wzMJk9asCrUFA=s256"
]
}
? 蛇形:
{
"user_ype": "robot",
"avatar_urls": [
"https://cdn.image.com/r9Z7phw4sFWwi-7YVqSiXuLo0wzMJk9asCrUFA=s256"
]
}
參考 GitHub 的 API 設(shè)計(jì):
前端如需使用駝峰命名,可使用 domchristie/humps 包對(duì)請(qǐng)求和結(jié)果的數(shù)據(jù)進(jìn)行轉(zhuǎn)換。
更多建議: