REST API を提供するサービスの 1 つへのアクセスを簡素化するために、Java SDK を構築しています。この SDK は、サードパーティの開発者が使用するものです。
問題の 1 つは、各要求のオプションのパラメーターを表す適切な方法を見つけることです。
残りのエンドポイントがあるとしましょう:GET /photos
これには、いくつかのオプションのパラメーターがあります: sortBy
、pageSize
、pageNumber
など。
Map<String,String>
1 つの解決策は、残りの呼び出しを表す api メソッドへのパラメーターとしてを受け入れることです。
interface RestService {
public List<Photo> getPhotos(Map<String,String> parameters);
}
このソリューションにはいくつかの問題があります。
- メソッドの署名は、このメソッドで使用できるオプションのパラメーターの名前 (および有効な値) に関する情報を開発者に提供しません。彼は REST API のドキュメントを参照する必要があり、理想的にはその必要を避けたいと考えています。
- 開発者は、呼び出すメソッドのパラメーターを使用していくつかの Map を作成し、パラメーターの名前と値をあらゆる場所でハードコーディングすることになります。これは、それらが変更された場合、それらを修正するのが面倒になることを意味します.
もう 1 つの解決策は、オプションのパラメーターに関する情報を含む Options オブジェクトを使用することです。ビルダー パターンを使用して、このオブジェクトを構築することもできます。
メソッドのシグネチャは次のようになります。
interface RestService {
public List<Photo> getPhotos(PhotosOptions options);
}
開発者は、利用可能なオプションのパラメーターが何であるかを理解し、次のPhotosOptions
ようなものを簡単に構築できます。
PhotosOptions options = PhotosOptions.builder().sortBy(DESC).pageSize(200).build();
List<Photo> photos = getPhotos(options);
問題は、SDK でカバーしようとしているサービスには、実装する必要がある膨大な範囲の要求があり、それらのほとんどすべてに許可されるオプションのリストが異なることです。これにより、多数のオプション クラスが生成される場合があります。
ここでの最善の解決策は何ですか? 組み合わせごとに Options オブジェクト (およびそのビルダー) を作成しますか? ここでは、あらゆる種類のパラメーターの組み合わせがあるため、継承はあまり役に立ちません。