私は、REST API用のPHPクライアントを最初から作成します。私はGuzzle libraryの使用を検討します。APIクライアントに適したアーキテクチャは何ですか?
私は、リクエストオブジェクト(カスタムxxxRequestクラスからのものなど)のような移送物を処理する必要はなく、ビジネスオブジェクト/サービスクラスのみを処理する必要があると思います。しかし、私が間違っている可能性があります...
可能なアーキテクチャの例を次に示します。どちらが良い習慣を尊重し、なぜですか?
気軽に改善するか、より良い方法を提案してください。
例1:
class ApiClient {
function createBooking (BookingEntity $booking, CustomerEntity $customer) {
//...
}
}
この例では、ユーザーが唯一のビジネスオブジェクトを使用することができますが、ApiClientクラスはまた... APIは、メソッドの多くを必要とする場合汚いことを始めることができますフィーチャを追加する場合は、ApiClientを変更する必要があります。
例2:
class ApiClient {
function execute(CreateBookingRequest $createBookingRequest) {
//...
}
}
class CreateBookingRequest {
private BookingEntity $booking;
private CustomerEntity $customer;
private $queryParams;
public createQueryParams() {
// to create the query params (from the attibutes) for the http client
}
}
ここでは新機能はApiClientを変更することがされていない必要がある場合には、単に新しいクラスを作成する必要があります。しかし、ユーザーは、Request接尾辞で指定されたクラスを扱わなければなりません。 IMO彼は要求や技術的なことについて何も知らない。
例3:
class BookingService {
function createBooking (BookingEntity $booking, CustomerEntity $customer) {
//...
}
}
この例では一つの層を追加します。
すべての場合、ApiClient/ServiceクラスのGuices httpClient属性はどこですか? ApiClientクラスはGuzz Clientクラスを拡張する必要がありますか?
非常に)
最後には、ではなく、少なくとも、あなたは正確にこれらのケースのためのAPIの基礎/ブートストラップになるだろうthisアウトを確認したいかもしれません(それはまだ終わっていないので、ご自身の責任でそれを使用します興味深い。多くの入力パラメータがある場合、あなたは何をお勧めしますか?例2では、xxxRequestクラスの属性としてそれらを入れることができます。 arameters、私たちは例1と3でそれをどのように再現できますか?クラスを追加すると、どのような命名規則が適していますか?当時のxxxParamは、xxxParamの各属性をhttpクライアント(この場合はJSON本体)のクエリパラメータに変換するためのアダプタ関数であるべきですか? – Kwadz
それは完全にあなたのドメインに依存します。多くのパラメータは、通常、まったく無関係なパラメータではなく、ある種のデータ構造を意味します。その場合、私はそれらをモデルクラスに入れます。私はクライアントが実際にインターフェイスの実装であり、APIがデータモデルを公開している可能性が高いことを再度指摘することができます。これはそのまま使用できます。シリアライゼーションは、クライアント自体の内部で行われます。クライアント自体は、モデルをシリアライズする方法を知っています。必要に応じて、別のシリアライゼーションレイヤーを作成することもできますが、依然としてクライアントによって呼び出されます。 –
しかし、createBookingメソッドの入力パラメータとしてモデルオブジェクトがたくさんある場合、それらを単一のオブジェクトにラップするのが良い方法だと私は間違っていますか?例えば、私たちがパラメータを持っているとしましょう:http://pastebin.com/dBKJnk4S私はcreateBookingメソッドの9つの引数を受け入れられないと思います。したがって、それらをラップする必要がありますか?それを行う良い方法は何ですか?これらの授業の明確な接尾辞は何になりますか?それをjson本体に変換するコードはどこにあるべきですか? – Kwadz