問題タブ [api-versioning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rest - バージョン管理された API の基礎となるコードベースをどのように管理しますか?
私は ReST API のバージョン管理戦略について調べてきましたが、それらのどれも解決していないように見えるのは、基礎となるコードベースをどのように管理するかということです。
たとえば、単一のフィールドではなく個別forename
のフィールドを返すように Customer リソースを変更するとします。(この例では、関連する概念を理解しやすいため、URL バージョン管理ソリューションを使用しますが、質問はコンテンツ ネゴシエーションまたはカスタム HTTP ヘッダーにも同様に適用できます)surname
name
にエンドポイントがhttp://api.mycompany.com/v1/customers/{id}
あり、別の互換性のないエンドポイントが にありますhttp://api.mycompany.com/v2/customers/{id}
。v1 API のバグ修正とセキュリティ アップデートは引き続きリリースしていますが、新機能の開発はすべて v2 に集中しています。API サーバーへの変更をどのように作成、テスト、デプロイするのですか? 少なくとも 2 つの解決策を確認できます。
v1 コードベースのソース管理ブランチ/タグを使用します。v1 と v2 は個別に開発および展開され、必要に応じてリビジョン コントロール マージが使用され、両方のバージョンに同じバグ修正が適用されます。これは、以前のバージョンをサポートしながらメジャーな新しいバージョンを開発するときにネイティブ アプリのコードベースを管理する方法と同様です。
コードベース自体が API バージョンを認識できるようにするため、v1 顧客表現と v2 顧客表現の両方を含む単一のコードベースになります。バージョン管理は、展開の問題ではなく、ソリューション アーキテクチャの一部として扱います。おそらく、名前空間とルーティングの組み合わせを使用して、要求が正しいバージョンで処理されるようにします。
ブランチ モデルの明らかな利点は、古い API バージョンを削除するのは簡単だということです。適切なブランチ/タグのデプロイを停止するだけです。ただし、複数のバージョンを実行している場合は、ブランチ構造とデプロイ パイプラインが非常に複雑になる可能性があります。「統一されたコードベース」モデルはこの問題を回避しますが、(私が思うに?) 不要になった非推奨のリソースとエンドポイントをコードベースから削除することははるかに困難になります。単純な正解がある可能性は低いため、これはおそらく主観的なものであることは承知していますが、複数のバージョンにわたって複雑な API を維持している組織がこの問題をどのように解決しているかを理解したいと思っています。
java - Android バージョンの管理: バージョンごとに異なるクラスを使用する
私は主な活動からこのクラスを使用しています:
ArrayList 内:
私が抱えている問題は、MediaSession が Android API バージョン 21 に属するクラスであり、バージョン 14 以降のアプリを作成しようとしていることです。
バージョンが < 21 の場合、アクティビティ (またはクラス) が MediaSession クラスを含むフィールドを無視するようにしたいと考えています。異なる ArrayLists を宣言する必要があり、どうすればそれができるかわかりません。そして、おそらくこれは最善の方法ではありません...
何か案は...?
アドバイスありがとうございます
ruby-on-rails - 自動生成されたドキュメントを備えた Rails API ビルダー
バージョニングと入力パラメーターだけでなく、返されるパラメーターのドキュメントも含めて、Rails アプリの API ドキュメントを生成する gem があるかどうか疑問に思っていました。ありがとう!
.net - MVC6 の VersionedRoute 属性の実装
バージョンがヘッダーで指定されている REST API でバージョン管理を有効にしようとしてい"api-version":2
ます。
このチュートリアルによると、作成するだけです
VersionConstraint : IHttpRouteConstraint
と
VersionedRoute: RouteFactoryAttribute
[VersionedRoute("api/controllerName", 2)]
使用法は、特定のバージョン (この場合はバージョン 2) 用に設計されたコントローラーに属性を適用することです。
これはすべて問題ありませんが、残念ながら、すべて MVC5 にあり、私は MVC6 を使用しています。したがって、動作RouteFactoryAttribute
しIHttpRouteConstraint
ません。
なんとかIRouteConstraint
交換することができましIHttpRouteConstraint
たが(うまくいくことを願っています)、の代わりが見つかりませんRouteFactoryAttribute
。
誰かが MVC 6 を使用してこのサンプルを提供できる場合、または少なくとも継承する必要がある正しいクラス (理想的には名前空間を使用) について言及できますか?
asp.net - IHttpControllerSelector を使用した AttributeRouting - API のバージョン管理
asp.net webapi で CustomHttpControlSelector と AttributeRouting を使用して、API のバージョン管理を実現しようとしています。
私がやろうとしているのは、コントローラーのバージョンを名前空間で区別することです。
リクエストが /api/v2/foo/bar に対して行われた場合、一致させたい
しかし、RoutePrefix (/api/v2/foo) 属性で完全な URL を使用しないとわかるように、ルーティングが開始されず、呼び出すと null が返されます
私の CustomHttpControlSelector で。すべてのコントローラーで /api/v2 を繰り返したくありません。
attributeRouting を削除し、次のような手動ルートを使用することにした場合
コントローラーと関数に名前を付ける柔軟性がすべて失われます。
この漠然とした状態から抜け出す方法はありますか?
注:CustomHttpControlSelectorの場合、http://aspnet.codeplex.com/SourceControl/changeset/view/dd207952fa86#Samples/WebApi/NamespaceControllerSelector/NamespaceHttpControllerSelector.csのコードを変更しました
ruby-on-rails - トークン認証とバージョン管理を工夫する
API バージョンでのmount_devise_token_auth_forの実装に問題があります。
まあ言ってみれば:
v2 を追加して、次のように同じパスに認証をマウントする場合:
devise の名前付きルート ヘルパーがそれらの名前で既に存在するため、失敗します。
これに対処するために名前空間を使用できますが、URI にバージョンを含める必要はありません。
お知らせ下さい。
ありがとう。
asp.net-core - アクション制約を使用する場合、MVC 6 で Swagger を使用する複数の API バージョン
うまくいけば、誰かが MVC 6 と Swagger のバージョン管理された API で同様のことを試して、さまざまなバージョンに関するドキュメントを表示したことでしょう。
この ASP.NET 5 リポジトリに従って、MVC 6 で推奨される API バージョン管理を使用しています。私が行った唯一の変更は、リクエストのカスタム http ヘッダーから API バージョンを読み取る GetVersion メソッドです。
そして、私は次のようなコントローラーを持っています:
バージョニングはカスタム http ヘッダーで行われるため、
/api/tags を取得
コンテンツ タイプ: アプリケーション/json
ヘッダーが指定されていないため、デフォルトで GetTags() アクションがヒットし、
/api/tags を取得
API バージョン: 2
コンテンツ タイプ: アプリケーション/json
GetTagsV2() アクションにヒットします。
このブログの手順に従って Swagger UI と Swagger GEN ライブラリを追加したので、project.json
次の依存関係があります。
次に、Startup.cs で Swagger をパイプラインに追加します。
Swagger を次のように構成します。
問題は、説明(Microsoft.AspNet.Mvc.ApiExplorer.ApiDescription のインスタンス)から、特定のアクションを Swagger UI に表示する必要があるかどうかを知るために必要な情報を取得する方法がわからないことです。指定されたバージョンで。どんなヒントでも大歓迎です。この ASP.NET 5 リポジトリのバージョン管理の実装がどのように機能するかを理解するのに役立ちます。なぜなら、私はまだそれをよく理解しておらず、アクションの制約がどのように機能するかについての適切な説明を見つけることができないからです。
PS:このスタックオーバーフローの質問は、MVC 6 でバージョン管理を実装するのに役立ちましたが、Swagger が API のバージョン管理のこの方法とどのように統合されるかについてはあまりわかりませんでした。
php - Slim フレームワークで API のバージョン管理をサポートする方法
Slim フレームワークを使用してモバイル アプリ用の REST API を作成してきました。現在、index.php は Web ルート内のフォルダー v1/ 内にあります。この index.php にはすべての API が含まれています。
ただし、新しいバージョンのモバイル アプリでは、同じ API エンドポイントに対してわずかに異なる応答が必要になるため、簡単にスケーリングできる API のバージョン管理が必要です。それぞれが index.php を持つ異なるフォルダー (v2、v3 など) を使用したくありません。
理想的には、「おそらく」単一の index.php ファイルが存在する必要があり、新しい API バージョン vX を追加する必要があるとしましょう。変更は共通 API の 1 つだけにある可能性があります。コードの変更を希望します。最小限にするために、その API 関数のみに制限することができ、他のいくつかの場所に制限することができます (他のすべての API に対してこの新しいバージョンを有効にするため)。
新しいバージョンを簡単に追加できるように、これを達成するための簡単で短い方法はありますか? これは一般的にどのように行うべきですか?
編集1:
以下は、この問題を解決するための「潜在的な」解決策です。問題点やより良い解決策を自由に指摘してください。
これを実現するために、条件 (アプリケーション全体のルート条件) を使用することにしました。
API バージョン 1 ~ 29 をサポートするすべての API (まったく同じ処理)
バージョン 1 ~ 21 とバージョン 22 ~ 29 で異なる API
したがって、数百の API があり、API の新しいバージョン 30 用に 3 つの API を変更する必要がある場合、API_B に対して上記で行ったようにこれら 3 つの API を変更し、apiVersion のアプリケーション全体のルート条件を変更するだけです。 .
java - API バージョンに関連する障害の解決方法
私は安静なサービスを受けており、このサービスを使用しているクライアントは 20 を超えています。
今、私はバージョンインサービスを導入することに決めました.私はグーグルをたくさん持っていて、記事を読んでいますが、どうすればいいのか完全に混乱しています. 新しいサービスの URI を変更すると@Path("/provider/v1")
したら、既存のクライアントにどのようにサポートを提供すればよいでしょうか? このことを考慮して、APIの新しいバージョンが動作するたびに、すべてのクライアントで変更を提供する必要がありますか?
グーグルの後、バージョニングを提供するには3つの方法があることがわかりました
URL のバージョン管理
カスタム リクエスト ヘッダー
コンテンツ タイプ
しかし、実用的な例が見つかりませんでした。この点で私を助けてください
http://stackoverflow.com/questions/389169/best-practices-for-api-versioning http://www.narwhl.com/2015/03/the-ultimate-solution-to-versioning-rest-apis-content -交渉/ http://restcookbook.com/Basics/versioning/
http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html
http://www.lexicalscope.com/blog/2012/03/12/how-are-rest-apis-versioned/
どんな助けでも大歓迎です