API Data ophalen

  • Hallo,


    Zoals sommigen al weten, ben ik bezig met een API Koppeling van Versio. Dit begin aardig te lukken. Maar toch zit ik tegen enkele problemen aan. Alsook ontvang ik graag enkele tips voor eventuele verbetering.


    De API code:




    De API Aanroepen:


    Nu is zijn mijn vragen:
    als ik de lijn van Versio Request een echo geef. krijg ik bijvoorbeeld:

    HTML
    [{"domain":"domin.com","available":false,"push_required":false}]

    Hoe kan ik ze elk apart gebruiken? Dat domain bijvoorbeeld in $versio->domain; zit en $versio->available; en $versio->available; ? Of eventueel anders?


    In "function request" zit $httpcode als ik daar echo geef, krijg ik de 200 status indien het ok is of iets anders als er wat fout loopt. Hoe kan ik deze ook in $result steken?


    Tips zijn uiteraard welkom!


    Aaron

  • Kijk eens naar json_decode

    Indeed, als je de $result van je api request decode met de json_decode krijg je een array terug met alle resultaten die je vanaf daar dan als array of object kan aanroepen.


    PHP
    return json_decode($result);

    PHP, JAVA, C#, JAVASCRIPT, HTML(5), CSS(3) developer.
    Vragen?! Stuur me gerust een prive bericht :) !

  • Misschien is het een idee om operaties te bundelen zodat de API bepaalde standaard taken kan uitvoeren? Hoe dit dan onder de motorkap is geregeld is de verantwoordelijkheid van de API. Daarom is het m.i. niet nodig om username/password op te slaan, het volstaat prima om deze als parameters mee te geven in een login() routine.


    Vervolgens zou je standaard operaties kunnen maken (afhankelijk van privileges?), dus in plaats van meteen weer terug te vallen op (rauwe) requests (heeft niet zoveel toegevoegde waarde) schrijf je routines die wat meer werk verzetten. Ik zou in een API dus eerder een methode getAvailabilty(<params>) verwachten in plaats van een semi-rauwe cURL-call via request(<params>) naar /domains/<domain>/availability, dit zou abstractie moeten zijn die de API (+initiële configuratie) verder voor je regelt.


    Verder: definieer je klasse-variabelen: debug/testMode. Vervolgens zou je iets kunnen doen met magische getters en setters, het is niet nodig om voor elk van deze variabelen een aparte methode te schrijven. Desnoods maak je een protected klasse-variabele (een array) voor configuratie. Kun je in de setter afdwingen dat het een bestaande config-key betreft.


    En laat je booleans ook echt booleans zijn, en geen strings :).


    Denk bij het ontwerp aan een meer "functioneel gedreven design", oftewel, vraag je af wat voor standaard taken iemand zou willen uitvoeren via zo'n API om werk uit handen te nemen. Daar lijken mij API's bij uitstek geschikt voor.

  • Aaron, volgens mij heb ik jou eerder geprobeerd te helpen met een koppeling tussen je website en Versio (3 jaar terug ofzo?). Werd me toen niet echt in dank afgenomen.


    Maar goed!


    Versio heeft een tijd terug hun nieuwe API gelanceerd, en daarmee direct de plank volledig mis geslagen. Zo heb ik zelf meerdere malen contact gehad met Versio, waarbij ze al een aantal extra commando's hebben toegevoegd aan de API omdat die ronduit miste. Daarnaast hebben we het ook gehad over hoe de API zijn resultaten terug geeft, waarbij mij verteld werd dat een efficiëntere manier pas in versie 2 komt van de REST API. Verder heb ik nog een ticket al geruime tijd open staan over een beveiliging issue waar ik updates over krijg (wat na weken, dan wel niet maanden, eindelijk voorruit gang in lijkt te komen).


    Terug over je vraag. Jij zoekt inderdaad json_decode. Ik je class een beetje aanpassen (persoonlijke voorkeur) naar bijvoorbeeld:


    Wat je dan bijvoorbeeld zo uit voert:



  • Pro tip: escape output. Data kan speciale karakters bevatten binnen de HTML-context.


    Dus in plaats van:

    PHP
    <?php
    echo '<pre>'.print_r($data, true).'</pre>';
    ?>

    Gebruik:

    PHP
    <?php
    echo '<pre>'.htmlspecialchars(print_r($data, true), ENT_QUOTES, 'UTF-8').'</pre>';
    ?>

    NB: met de tweede parameter van print_r() kun je aangeven dat de data geretourneerd moet worden als string. Op die manier hoef je je pre's niet apart te echo'en en kun je je code verder inkorten.


    In het algemeen is het handig om een functie te hebben die output "HTML safe" maakt:

    PHP
    <?php
    function escape($in) {
        return htmlspecialchars($in, ENT_QUOTES, 'UTF-8');
    }
    ?>

    En je kunt (dan) natuurlijk ook functies stapelen:


    PHP
    <?php
    function dump($a) {
        echo '<pre>'.escape(print_r($a, true)).'</pre>';
    }
    ?>

    Zodat je zaken als gebruikte character encoding maar op één plaats vastlegt (die je bijvoorbeeld uit config / een constante kunt trekken) zodat je deze vervolgens ook maar op één plaats hoeft te wijzigen (en al helemaal ideaal als dat dan de config / een constante is, je hoeft dan verder geen letter code te veranderen).

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!