亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

directory search
閱讀前篇 簡介 Yii 是什么 從 Yii 1.1 升級 入門 安裝 Yii 運行應(yīng)用 第一次問候 使用Forms 數(shù)據(jù)庫應(yīng)用 使用 Gii 生成代碼 進階 應(yīng)用結(jié)構(gòu) 概述 入口腳本 應(yīng)用(Applications) 應(yīng)用組件(Application Components) 控制器(Controllers) 模型(Models) 視圖(views) 模塊(Modules) 過濾器(Filters) 小部件(Widgets) 前端資源(Assets) 擴展(Extensions) 請求處理 運行概述 啟動引導(Bootstrapping) 路由和創(chuàng)建URL 請求(Requests) 響應(yīng)(Responses) Sessions 和 Cookies 錯誤處理(Handling Errors) 日志(Logging) 關(guān)鍵概念 組件(Component) 屬性(Property) 事件(Events) 行為(Behaviors) 配置(Configurations) 別名(Aliases) 類自動加載(Autoloading) 服務(wù)定位器(Service Locator) 依賴注入容器(Dependency Injection Container) 配合數(shù)據(jù)庫工作 數(shù)據(jù)庫訪問 (Data Access Objects) 查詢生成器(Query Builder) 活動記錄(Active Record) 數(shù)據(jù)庫遷移(Migrations) Sphinx Redis MongoDB Elasticsearch 接收用戶數(shù)據(jù) 創(chuàng)建表單(Creating Forms) 輸入驗證(Validating Input) 文件上傳(Uploading Files) 收集列表輸入(Collecting Tabular Input) 多模型的復合表單(Getting Data for Multiple Models) 顯示數(shù)據(jù) 格式化輸出數(shù)據(jù)(Data Formatting) 分頁(Pagination) 排序(Sorting) 數(shù)據(jù)提供器(Data Providers) 數(shù)據(jù)小部件(Data Widgets) 客戶端腳本使用(Working with Client Scripts) 主題(Theming) 安全 認證(Authentication) 授權(quán)(Authorization) 處理密碼(Working with Passwords) 客戶端認證(Auth Clients) 最佳安全實踐(Best Practices) 緩存 概述 數(shù)據(jù)緩存 片段緩存 頁面緩存 HTTP 緩存 RESTfull Web服務(wù) 快速入門(Quick Start) 資源(Resources) 控制器(Controllers) 路由(Routing) 格式化響應(yīng)(Response Formatting) 授權(quán)認證(Authentication) 速率限制(Rate Limiting) 版本(Versioning) 錯誤處理(Error Handling) 開發(fā)工具 調(diào)試工具欄和調(diào)試器 使用Gii生成代碼 生成API文檔 測試 概述(Overview) 配置測試環(huán)境(Testing environment setup) 單元測試(Unit Tests) 功能測試(Function Tests) 驗收測試(Acceptance Tests) 測試夾具(Fixtures) 高級專題 高級應(yīng)用模板 創(chuàng)建自定義應(yīng)用程序結(jié)構(gòu) 控制臺命令 核心驗證器(Core Validators) 國際化 收發(fā)郵件 性能優(yōu)化 共享主機環(huán)境 模板引擎 集成第三方代碼 小部件 Bootstrap 小部件 Jquery UI 助手類 概述 Array 助手(ArrayHelper) Html 助手(Html) Url 助手(Url)
characters

版本

版本

你的API應(yīng)該是版本化的。不像你完全控制在客戶端和服務(wù)器端Web應(yīng)用程序代碼, 對于API,您通常沒有對API的客戶端代碼的控制權(quán)。 因此,應(yīng)該盡可能的保持向后兼容性(BC),如果一些不能向后兼容的變化必須引入 APIs,你應(yīng)該增加版本號。你可以參考Semantic Versioning?有關(guān)設(shè)計的API的版本號的詳細信息。

關(guān)于如何實現(xiàn)API版本,一個常見的做法是在API的URL中嵌入版本號。 例如,http://example.com/v1/users代表/users版本1的API. 另一種API版本化的方法最近用的非常多的是把版本號放入HTTP請求頭,通常是通過Accept頭, 如下:

// 通過參數(shù)Accept: application/json; version=v1
// 通過vendor的內(nèi)容類型Accept: application/vnd.company.myapp-v1+json

這兩種方法都有優(yōu)點和缺點, 而且關(guān)于他們也有很多爭論。 下面我們描述在一種API版本混合了這兩種方法的一個實用的策略:

  • 把每個主要版本的API實現(xiàn)在一個單獨的模塊ID的主版本號 (例如?v1,?v2)。 自然,API的url將包含主要的版本號。
  • 在每一個主要版本 (在相應(yīng)的模塊),使用?Accept?HTTP 請求頭 確定小版本號編寫條件代碼來響應(yīng)相應(yīng)的次要版本.

為每個模塊提供一個主要版本, 它應(yīng)該包括資源類和控制器類 為特定服務(wù)版本。 更好的分離代碼, 你可以保存一組通用的 基礎(chǔ)資源和控制器類, 并用在每個子類版本模塊。 在子類中, 實現(xiàn)具體的代碼例如?Model::fields()。

你的代碼可以類似于如下的方法組織起來:

api/
    common/
        controllers/
            UserController.php
            PostController.php
        models/
            User.php
            Post.php
    modules/
        v1/
            controllers/
                UserController.php
                PostController.php
            models/
                User.php
                Post.php
        v2/
            controllers/
                UserController.php
                PostController.php
            models/
                User.php
                Post.php

你的應(yīng)用程序配置應(yīng)該這樣:

return [
    'modules' => [
        'v1' => [
            'basePath' => '@app/modules/v1',
        ],
        'v2' => [
            'basePath' => '@app/modules/v2',
        ],
    ],
    'components' => [
        'urlManager' => [
            'enablePrettyUrl' => true,
            'enableStrictParsing' => true,
            'showScriptName' => false,
            'rules' => [
                ['class' => 'yii\rest\UrlRule', 'controller' => ['v1/user', 'v1/post']],
                ['class' => 'yii\rest\UrlRule', 'controller' => ['v2/user', 'v2/post']],
            ],
        ],
    ],
];

因此,http://example.com/v1/users將返回版本1的用戶列表,而?http://example.com/v2/users將返回版本2的用戶。

使用模塊, 將不同版本的代碼隔離。 通過共用基類和其他類 跨模塊重用代碼也是有可能的。

為了處理次要版本號, 可以利用內(nèi)容協(xié)商 功能通過 yii\filters\ContentNegotiator 提供的行為。contentNegotiator?行為可設(shè)置 yii\web\Response::acceptParams 屬性當它確定 支持哪些內(nèi)容類型時。

例如, 如果一個請求通過?Accept: application/json; version=v1被發(fā)送, 內(nèi)容交涉后,yii\web\Response::acceptParams將包含值['version' => 'v1'].

基于?acceptParams?的版本信息,你可以寫條件代碼 如 actions,resource classes,serializers等等。

由于次要版本需要保持向后兼容性,希望你的代碼不會有 太多的版本檢查。否則,有機會你可能需要創(chuàng)建一個新的主要版本。
Previous article: Next article: