2つのsimilairAPIを1つのPHPフレームワークに実装するための良い方法は何でしょうか。
私の考えは次のようなものでした:
- /vendors/wrapperA.php-親を拡張し、APIを実装します(A)
- /vendors/wrapperB.php-親を拡張し、APIを実装します(B)
- Parent.php- APIラッパーを使用するために直接参照される唯一のスクリプト
- Parent.phpで構成するための$config[]配列
- index.php- Parent.phpを実装し、参照するだけのWebサイト
APIには多くのメソッドがあるとしましょうが、実装するのは2つの単純なAPI呼び出しだけです。
- connect()-サービスへの接続を作成します。
- put()-成功した場合は「putID」を返します。
API (A)とAPI (B)は異なるため、これら2つのメソッドを抽象化することにより、ラッパーがそのユーティリティを実装する方法を示します。
さて、私のポイントに:
- これをPHPで実装するための良い方法は何でしょうか?
- connect()ステートメントは、有効な接続があることを検証する必要があります。
- put()ステートメントはIDを返す必要があります
- putメソッドの違いを明らかにしたくはありません。API認証を正しく構成したかどうかに基づいて機能する必要があります(どのような場合でも、秘密鍵またはその他の方法で)
すなわち
何かのようなもの
<?php $parent = new Parent();
$parent->connect(); //connect to one or both API's.
$parent->put('foo'); //push foo to the API
?>
現在、Parent.phpにすべてのコードがあります。
Parent.phpにすべてのコードがある場合の問題
- コードの無秩序な増加
- 3番目のAPIを追加する場合のモジュラープラグインの欠如。
- コードの混乱-どのAPIがどれですか?
編集:マリンの答えに基づいて考案されたソリューション
<?php
/*** Interface ***/
interface API_Wrapper {
function connect();
function put($file);
}
/*** API Wrappers ***/
class API_A_Wrapper implements API_Wrapper {
function connect() {}
function put($file) { print 'putting to API A.'; }
}
class API_B_Wrapper implements API_Wrapper {
function connect() {}
function put($file) { print 'putting to API B.'; }
}
/*** Factory ***/
class Factory {
public static function create($type){
switch ($type) {
case "API_A" :
$obj = new API_A_Wrapper();
break;
case "API_B" :
$obj = new API_B_Wrapper();
break;
}
return $obj;
}
}
/*** Usage ***/
$wrapperA = Factory::create("API_A");
$wrapperA->put('foo');
$wrapperB = Factory::create("API_B");
$wrapperB->put('foo');