Фасад над API запросами. Как собрать объекты, их информацию и упаковать в один запрос? Имеется API обертка над запросами. Они построены так, что в одном http запросе можно внутри послать еще пачку на выборку, изменение, создание данных и т.п.
Хотел сделать статический фасад, на подобие:Users::find($user_id);
Users::create(['name' => 'foobar']);
$s = new Service($id);
$s->field = 'FooBar';
$s->update();
Reference::findByType(Type::ORGS);
Где каждая строка по-сути это запрос на удаленный сервер. Интересует как в этих объектах собрать общие параметры запроса и послать одим в последнем методе?
Какие паттерны под это дело существуют? Фабрика и наблюдатель, мне кажется не подходят. Да и городить монструозное ООП не хочется, а сделать легкий фасад, как в Laravel например.

21 Авг 2019 в 07:08
256 +1
0
Ответы
1

Для реализации фасада над API запросами можно воспользоваться паттерном "Строитель" (Builder). Этот паттерн позволяет поэтапно собирать сложные объекты с определенными параметрами и в конечном итоге получить готовый объект для отправки запроса.

В вашем случае, можно создать класс-строитель, который будет иметь методы для установки различных параметров запроса (например, тип запроса, данные для отправки, заголовки и т.д.). Затем, при вызове метода запроса, этот класс-строитель будет собирать все параметры в один объект запроса и отправлять его на удаленный сервер.

Пример реализации может выглядеть примерно так:

class ApiRequestBuilder {
private method;privatemethod;
private
method;private
url;
private data;privatedata;
private
data;private
headers;
public function setMethod($method) {
$this->method = method;returnmethod;
return
method;return
this;
}
public function setUrl($url) {
$this->url = url;returnurl;
return
url;return
this;
}
public function setData($data) {
$this->data = data;returndata;
return
data;return
this;
}
public function setHeaders($headers) {
$this->headers = headers;returnheaders;
return
headers;return
this;
}
public function send() {
// делаем запрос на удаленный сервер с установленными параметрами
}
}
// Использование
request=newApiRequestBuilder();request = new ApiRequestBuilder();
request=newApiRequestBuilder();
request->setMethod('POST')
->setUrl('http://example.com/api/users')
->setData(['name' => 'foobar'])
->setHeaders(['Authorization' => 'Bearer token'])
->send();

Таким образом, вы можете легко и гибко собирать объекты запроса с помощью класса-строителя и отправлять их на удаленный сервер. Это позволит вам держать код ваших запросов чистым и организованным, а также легко расширять функциональность фасада при необходимости.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир