1

私は安静なサービスを受けており、このサービスを使用しているクライアントは 20 を超えています。

@Path("/provider")
public class Provider{

@Path("/simpleprovider")
@GET
public String getProvider(){
return "Simple Provider";
}
}

今、私はバージョンインサービスを導入することに決めました.私はグーグルをたくさん持っていて、記事を読んでいますが、どうすればいいのか完全に混乱しています. 新しいサービスの URI を変更すると@Path("/provider/v1")したら、既存のクライアントにどのようにサポートを提供すればよいでしょうか? このことを考慮して、APIの新しいバージョンが動作するたびに、すべてのクライアントで変更を提供する必要がありますか?

グーグルの後、バージョニングを提供するには3つの方法があることがわかりました

  1. URL のバージョン管理

  2. カスタム リクエスト ヘッダー

  3. コンテンツ タイプ

しかし、実用的な例が見つかりませんでした。この点で私を助けてください

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/

どんな助けでも大歓迎です

4

1 に答える 1

2

サービスのバージョン管理は非常に難しい場合があり、バージョン管理戦略を決定する際には常に大きな決断になります。特に、サービスを使用している人がいる場合。私の経験から、考慮すべき点がいくつかあります。

  1. API の太陽設定バージョンをいつ、どのように計画するかを理解し、伝達します。一番避けたいのは、API の 10 の異なるバージョンを維持しなければならないという問題です。

  2. バージョンの変更が絶対に必要かどうかを理解します。経験則としては、コア機能が変更されているか、API と統合している誰かのソフトウェアがコントラクトによって破損する可能性があるかどうかです。バージョン管理が本当に必要かどうかを判断する際には、次の点を考慮してください。

    • リソースからフィールドを削除する場合。
    • URL (またはメソッド) を削除 (または更新) する場合。
    • 既存のエンドポイント (またはメソッド) ロジックが変更され、コンシューマーによる再実装が必要になる場合。
    • 全体として、あなたが行った変更があなたの API との統合を壊す可能性があるかどうか。
  3. 以前のバージョンとの下位互換性がないデータベースの変更が必要ですか? これは、バージョニングが (皮肉なことに) 本当に楽しくなる時期です。なぜなら、データベースの下位互換性を確保する必要があるかもしれないからです。

ただし、あなたの質問に答えるために、URL にバージョンを入れる最良の方法を見つけました。インテグレーターにとって非常に明確になるように、バージョニングは非常にシンプルかつ慎重に行ってください。例えば:

  • GET /v1/products/{id} // バージョン 1
  • GET /v2/products/{id} // バージョン 2

** URL のバージョン管理を決定する場合、私のアドバイスは、バージョンに do "v" を付け、1 や 2 のような単一の番号を付けることです。バージョンやサブバージョンなどには触れないでください。これにより、API がそれは消費者に懸念を引き起こす可能性がある多くの回転数です。また、バージョンを URL のできるだけ左側に保つようにしてください。バージョンの右側にあるものはすべて、新しいバージョン管理されたリソースであるという考え方です。ヘッダーを使用してサービスをバージョン管理することは避けます。コンシューマからバージョンを隠したくありません。バージョン管理については、可能な限り透明性と明示性を確保してください。

URL のバージョニングにより、Web サーバーやプロキシでもいくつかの便利なルーティングなどを行うことができます。実際のコードでは、次のようにバージョンを変更できます。たとえば、次のようになります。

[HttpGet("v1/products")]
public Product GetProduct(string id)
{
    return _repository.GetProduct(id);
}

または、仮想ディレクトリ (または何でも) を設定して、Web サーバーを使用してバージョン管理することもできます。次に、コードは代わりに次のようになります。

[HttpGet("products")]
public Product GetProduct(string id)
{
    return _repository.GetProduct(id);
}

ただし、バージョンを決定する場合は、各決定の長所と短所について考え、比較検討することが非常に重要です。なぜなら、API を実行していて、人々が悪い決定を使用している場合、急いであなたに追いつくからです。

于 2016-02-02T18:58:48.100 に答える