Gdy napiszesz wystarczającą ilość kodu, który komunikuje się z interfejsami API innych firm, najprawdopodobniej komunikujesz się za pomocą interfejsu API opartego na XML.
I powiedz, co chcesz: niektórym się to podoba, innym nie. Ale one istnieją i dlatego w pewnym momencie będą niezbędną częścią twojego rozwoju.
Jeśli interfejs API jest dobrze zaprojektowany, prawdopodobnie użyje przestrzeni nazw dla różnych typów żądań i odpowiedzi. A kiedy piszesz klienta dla wspomnianego API, prawdopodobnie będziesz musiał pobrać właściwości przestrzeni nazw.
Łatwo to zrobić, ale nie jest to od razu oczywiste. W tym poście przedstawię przykład, jak to zrobić.
W tym przykładzie załóżmy, że wykonuję wywołanie interfejsu API opartego na języku XML. W tym celu korzystam z biblioteki Array-To-XML firmy Spatie (co jest niezwykle wygodne).
Aby skonfigurować żądanie, tworzę je za pomocą tablicy w następujący sposób:
<?php
// Setup the XML to connect to the API endpoint.
$namespaceExampleGetIDs = [
'Version' => $this->version,
'ApiKey' => $this->getPrivateKey(),
'acmePasscode' => $this->getPasscode(),
'Call' => [
'_attributes' => ['Method' => 'Namesepace.Example.GetIDs'],
'Date' => $this->getTimestamp(),
],
];
$xml = ArrayToXml::convert($namespaceExampleGetIDs, 'Acme', false);
Następnie użyję klienta API (który został streszczony, aby ten post był jak najbardziej zwięzły), aby wykonać żądanie z API. Stamtąd możemy pobrać zawartość odpowiedzi i wykonać każdą niezbędną pracę (w tym przypadku będzie to iteracja przez właściwości odpowiedzi).
I tutaj w grę wchodzi pobieranie właściwości przestrzeni nazw. Zakładając, że potrzebujemy uzyskać dostęp do pojedynczej właściwości lub właściwości właściwości, oto jak to zrobić, gdy jest to przestrzeń nazw:
<?php
// Now make a request to the server.
$response = $this->makePostRequest($xml);
$xmlResponse = new SimpleXMLElement($response->getBody()->getContents());
// Iterate through all of the event IDs to get the information about them.
$events = [];
foreach ($xmlResponse->{'Namesepace.Example.GetIDs'}->EventID as $eventId) {
// Work with the $eventId however necessary...
}
Krótko mówiąc, nawiasy klamrowe służą jako „ zmienne zmienne " i dają nam dostęp do dynamicznej natury obiektu.
Z instrukcji:
Czasami wygodnie jest mieć możliwość posiadania zmiennych nazw zmiennych. To znaczy nazwa zmiennej, która może być ustawiana i używana dynamicznie.
A ponieważ pomocne jest ich dynamiczne ustawianie, naturalnie pomocne jest ich dynamiczne pobieranie.
Więc następnym razem, gdy będziesz pracować z API opartym na XML (lub być może dowolnym API), zwróć uwagę, że możesz pobrać właściwości obiektu z przestrzenią nazw za pomocą zmiennych zmiennych.
To ma sens, prawda?

