Borykam się z pewnym problem, otóż... jestem w trakcie tworzenia skryptu mającego za zadanie "rozmawiać" z zewnętrzymi API.
Reguła jest prosta, mam obiekt bazowy, zawierający dane które powinny zostać wysłane, oraz konfigurację dostepową (klucze, id etc.) do każdego API z osobna. Sprawa niby ogólnie jasna, muszę w jakiś magiczny sposób dostarczyć dane z punktu A (mój skrypt) do punktu B (któreś z API), każde z nich ma inną strukturę, jedne akceptują kodowanie X, inne tylko parametry GET. Zastosowałem Adapter Pattern, do każdego z API przygotowałem adapter, implementujący Interface
<?php namespace Acme\DemoBundle\Service\Adapter; use Symfony\Component\Form\Form; use Symfony\Component\Security\Core\User\UserInterface; use Acme\DemoBundle\Entity\DataStorage; interface AdapterInterface { /** * @param array $configuration * @return $this */ /** * @param UserInterface $user * @return $this; */ public function saveConfiguration(UserInterface $user); /** * @param UserInterface $user * @return array */ public function loadConfiguration(UserInterface $user); /** * @param string $name * @return $this */ public function setName($name); /** * @return string */ public function getName(); /** * @param DataStorage $dataStorage * @return $this */ public function sendData(DataStorage $dataStorage); /** * @return Form */ public function getForm(); }
Adaptery są ładowane do AdapterCollectora, który jest swego rodzaju container'em dla całej tej zgraii, przez niego przechodzą paramtery, ma on dostęp do każdego adaptera i jest wywoływany w controllerach, tak aby odpowiadać za przekazywanie danych(parametrów).
Dodatkowo, dane które są wysyłane, są zależne od użytkownika i to użytkownik określa "parametry" dostępowe poprzez formularz (także adapter zwraca ów formularz, dedykowany pod konkretne API).
Więc to z czym mam problem:
1. Czy moje podejście jest logiczne i poprawne w wyżej opisanej sytuacji, jeżeli nie, to w którym kierunku powinienem podążać?
2. API zwracają "okresowe" requesty zwrotne do aplikacji, często o zmianę parametrów przetrzymywanych lokalnie, poprawki, błędy, potwierdzenia etc., do każdego mam osobny controller i tyle o ile w przypadku 2-3 jest to do przyjęcia, to w przypadku 10 czy 20 już będzie bardzo problematyczne (w zarzązaniu). Czy powinienem kierować wszystkie requesty API -> Aplikacja do jednego controllera, a potem do konkretnego adaptera? A może inaczej?
Pozdrawiam
--edit--
W obecnej chwili, każde api wysyła request do osobnego controllera, ten wczytuje collector, zaś ten ładuje adapter i z niego wczytuje/zapisuje do niego jakieś dane. Nie wiem czy jest to optymalne, jakieś sugestie?