• Login
  • Register
  • Zoek
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • Filebase Entry
  • More Options

ICTscripters

Dé plek voor IT

Dé plek voor IT

Login

Geavanceerde opties
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Dé plek voor IT - ICTscripters
  2. Forum
  3. Scripting & programmeren
  4. PHP + SQL

Forum

  • Beta-testers gezocht voor Crypto-oefenplatform

    Syntax 29 januari 2026 om 16:11
  • Na 15 jaar terug van weggeweest: iCriminals.nl is terug (BETA)!

    Syntax 19 januari 2026 om 09:34
  • Developer Gezocht

    Mikevdk 10 januari 2026 om 18:57
  • Op zoek naar de legends

    Syntax 5 januari 2026 om 13:50
  • [FREE] WeFact Hosting module

    Jeroen.G 13 oktober 2025 om 14:09
  • Help testers nodig voor android app Urgent

    urgentotservices 26 september 2025 om 10:21
  • Versio vervanger

    Jeroen.G 25 augustus 2025 om 15:56
  • Afspraken systeem met planbeperking

    Lijno 1 augustus 2025 om 23:04

Marktplaats

  • 321 Nieuwe Domeinnamen December 2025

    shiga 1 januari 2026 om 10:26
  • Meerdere mafia game template te koop

    Syntax 26 december 2025 om 00:07
  • Van een pixelige afbeelding naar een strakke, moderne website

    Syntax 21 december 2025 om 17:05

API Data ophalen

  • Aaron
  • 5 augustus 2017 om 14:21
  • Aaron
    Administrator
    Ontvangen Reacties
    60
    Berichten
    1.020
    • 5 augustus 2017 om 14:21
    • #1

    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:

    PHP
    <?php
    class Versio_API {
    
    
    
    
    	function setApi_login()
    	{
    		$this->loginusername = '';
    		$this->loginpassword = '';
    
    
    	}
    	function setApi_debug()
    	{
    		$this->debug = true;
    	}
    
    
    	function setApi_testmodus($testmodus)
    	{
    		if ($testmodus == 'true') {
    			$this->endpoint = 'https://www.versio.nl/testapi/v1';
    		}else{
    			$this->endpoint = 'https://www.versio.nl/api/v1';
    		} 
    	}
    		function setApi_output($outputresult)
    	{
    			$this->output = $outputresult;
    	}
    
    
    	function request($requesttype, $request, $data=array())
    	{
    		$url = $this->endpoint.$request;
    		$ch = curl_init();	
    		curl_setopt($ch, CURLOPT_USERPWD, $this->loginusername . ":" . $this->loginpassword);
    		curl_setopt($ch, CURLOPT_URL, $url);
    		curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $requesttype);
    		curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    
    		$result = curl_exec($ch);
    		$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    		curl_close($ch);
    		$debugdata = array('requesttype' => $requesttype, 'url' => $url, 'postdata' => $data, 'result' => $result, 'httpcode' => $httpcode);// Debug opslaan in DB (latere fase)
    				return $result;
    
    
    	}
    }
    Toon Meer


    De API Aanroepen:

    Code
    <?
    error_reporting(E_ALL);
    ini_set("display_errors", 1);
    
    
    require('class_versio_api.php');
    
    
    
    
    $versio = new Versio_API();
    $versio->setApi_login();
    $testmode = true;
    
    
    $versio->setApi_testmodus($testmode);
    $data = array(
        'domain' => 'domin.com', 
    
    
       );
    $versio->request('GET', '/domains/domin.com/availability', $data, true);
    ?>
    Toon Meer


    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

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Luc
    Software Engineer
    Ontvangen Reacties
    44
    Berichten
    1.986
    • 5 augustus 2017 om 18:59
    • #2

    Kijk eens naar json_decode

    Website: https://devimo.nl
    Skype: https://join.skype.com/invite/dJyYILTt7Eqh

  • T.Nijborg
    Hoofd Moderators
    Ontvangen Reacties
    31
    Berichten
    504
    • 6 augustus 2017 om 21:34
    • #3
    Citaat van Luc

    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 :) !

  • M.Beers
    Elite members
    Ontvangen Reacties
    31
    Berichten
    460
    • 6 augustus 2017 om 23:46
    • #4

    Misschien een idee om een third party library te gebruiken voor je Requests ... Ik vind Guzzle bijvoorbeeld fijn werken.

    http://docs.guzzlephp.org/en/stable/

    Dit was mijn spreekbeurt, zijn er nog vragen?

  • FangorN
    Professional
    Ontvangen Reacties
    196
    Articles
    2
    Berichten
    737
    • 7 augustus 2017 om 00:52
    • #5

    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.

  • cakemasher
    Developer
    Ontvangen Reacties
    2
    Berichten
    225
    • 13 augustus 2017 om 15:34
    • #6

    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:

    PHP
    <?php
    
    
    	/* API class. */
    	class Versio_API
    	{
    		/* API inlog gegevens. */
    		private $api_username = '';
    		private $api_password = '';
    		
    		/* Plekje voor api_url. */
    		private $api_url;
    		
    		/* Plekje voor debug value. */
    		private $debug;
    		
    		/* Plekje voor een eventuele foutmelding. */
    		private $last_error;
    		
    		
    		/* Constructer. */
    		public function __construct ($realm, $debug = false)
    		{
    			/* Is de realm test? */ */
    			if ($realm == 'test')
    			{
    				/* Ja, defineer de api_url voor de test api. */
    				$this->api_url = 'https://www.versio.nl/testapi/v1';
    			}
    			else
    			{
    				/* Nee, defineer de api_url voor de live api. */
    				$this->api_url = 'https://www.versio.nl/api/v1';
    			}
    			
    			/* Set debuggin. */
    			$this->set_api_debug ($debug);
    		}
    		
    		
    		/* Functie om debug aan te zetten of niet. */
    		public function set_api_debug ($value = true)
    		{
    			/* Defineer de value. */
    			$this->debug = $value;
    		}
    		
    		
    		/* Functie om debug te laten zien, op te slaan, of iets anders. */
    		public function debug_show ($data)
    		{
    			/* Staat debug aan? */
    			if ($this->debug === true)
    			{
    				/* Ja, laat zien. */
    				echo '<pre>';
    				print_r ($data);
    				echo '</pre>';
    			}
    		}
    		
    		
    		/* Functie om de laatste foutmelding op te halen. */
    		public function get_last_error ()
    		{
    			/* Geef de laatste error terug. */
    			return $this->last_error;
    		}
    		
    		
    		/* Functie om een request uit te voeren. */
    		public function request ($requesttype, $request, $data = array ())
    		{
    			/* Defineer de URL. */
    			$url = $this->api_url . $request;
    			
    			/* Maak een curl object. */
    			$ch = curl_init ();	
    			
    			/* Defineer de request url. */
    			curl_setopt ($ch, CURLOPT_URL, $url);
    			
    			/* Defineer de inlog gegevens voor de API. */
    			curl_setopt ($ch, CURLOPT_USERPWD, $this->api_username . ':' . $this->api_password);
    			
    			/* Geef een custom request op. */
    			curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, $requesttype);
    			
    				/* Is de data array leeg? */
    				if (count (data) > 0)
    				{
    					/* Nee, geef deze mee als post velden. */
    					curl_setopt ($ch, CURLOPT_POSTFIELDS, json_encode ($data));
    				}
    			
    			/* Geef aan de result terug te willen. */
    			curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    			
    			/* Voer de curl uit. */
    			$result = curl_exec ($ch);
    			
    			/* Haal de HTTP code op. */
    			$httpcode = curl_getinfo ($ch, CURLINFO_HTTP_CODE);
    			
    			/* Sluit het curl object. */
    			curl_close ($ch);
    			
    			/* Laat de debug zien. */
    			$this->debug_show (Array ('requesttype' => $requesttype, 'url' => $url, 'postdata' => $data, 'result' => $result, 'httpcode' => $httpcode));
    			
    				// https://nl.wikipedia.org/wiki/Lijst_van_HTTP-statuscodes
    				/* Is de request gelukt? */
    				if ($httpcode >= 200 && $httpcode <= 299)
    				{
    					/* Ja, geef het resultaat terug. */
    					return Array ('http_code' => $httpcode, 'result' => json_decode ($result));
    				}
    				else
    				{
    					/* Nee, sla de array als foutmelding op. */
    					$this->last_error = Array ('http_code' => $httpcode, 'result' => json_decode ($result))
    					
    					/* Nee, gooi exception. */
    					throw new Exception ();
    				}
    		}
    	}
    	
    ?>
    Toon Meer

    Wat je dan bijvoorbeeld zo uit voert:


    PHP
    <?php
    	
    	/* Include de api class. */
    	include ('api_versio.php');
    	
    	/* Maak een versio object en geef aan dat we willen testen en debuggen. */
    	$versio = new Versio_API ('test', true);
    	
    	/* Maak een request array. */
    	$request_array = Array (
    		'domain' => 'domin.com', 
    	);
    	
    		/* Probeer het onderstaande. */
    		try
    		{
    			/* Voer de request uit en sla results in data op. */
    			$data = $versio->request ('GET', '/domains/domin.com/availability', $request_array);
    	
    			/* Print de data in je browser. */
    			echo '<pre>';
    			echo 'HTTP code: ' . $data['http_code'] . '<br /><br />';
    			print_r ($data['result']);
    			echo '</pre>';
    		}
    		catch (Exception $e)
    		{
    			/* Foutmelding gevangen, haal deze op. */
    			$error = $version->get_last_error ();
    			
    			/* Laat hem zien. */
    			echo '<pre>';
    			echo '<strong>Error caught!!</strong><br /><br />';
    			echo 'HTTP code: ' . $error['http_code'] . '<br /><br />';
    			print_r ($error['result']);
    			echo '</pre>';
    		}
    		
    ?>
    Toon Meer

    Bewerkt 3 keer, laatst door cakemasher (13 augustus 2017 om 17:03).

  • FangorN
    Professional
    Ontvangen Reacties
    196
    Articles
    2
    Berichten
    737
    • 14 augustus 2017 om 16:13
    • #7

    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!

Maak een account aan Login

ICT Nieuws

  • Fijne feestdagen

    tcbhome 28 december 2025 om 13:55
  • Kritieke update voor Really Simple Security-plug-in

    K.Rens 16 november 2024 om 16:12
  • ING Nederland streeft naar ondersteuning van Google Pay tegen eind februari

    K.Rens 2 november 2024 om 16:09

Blogs

  • Functioneel ontwerp

    Dees 28 december 2014 om 12:38
  • Access Control List implementatie in PHP/MySQL - deel 1/2

    FangorN 28 december 2018 om 12:35
  • Access Control List implementatie in PHP/MySQL - deel 2/2

    FangorN 29 december 2018 om 12:37
  1. Marktplaats
  2. Design
  3. Voorwaarden
  4. Ons team
  5. Leden
  6. Geschiedenis
  7. Regels
  8. Links
  9. Privacy Policy
ICTscripters ©2005 - 2026 , goedkope hosting door DiMoWeb.com, BE0558.915.582
Sponsors: Beste kattenhotel provincie Antwerpen | Beste Zetes eid kaartlezer webshop
Style: Nexus by cls-design
Stylename
Nexus
Manufacturer
cls-design
Licence
Commercial styles
Help
Supportforum
Visit cls-design