• Inloggen
  • Registreer
  • Zoeken
Dit topic
  • Overal
  • Dit topic
  • Dit forum
  • Artikelen
  • Pagina's
  • Forum
  • Downloads
  • Meer opties

ICTscripters

Dé plek voor IT

Dé plek voor IT

Aanmelden

Geavanceerde opties
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
    3. Onopgeloste topics
  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
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
    3. Onopgeloste topics
  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
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
    3. Onopgeloste topics
  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
  1. Dé plek voor IT - ICTscripters
  2. Forum
  3. Scripting & programmeren
  4. PHP + SQL

Forum

  • nieuwe game

    tigermaffia 31 oktober 2026 om 23:00
  • Criminolz

    qevanto 31 oktober 2026 om 20:52
  • [Beta] Ottomaan: gratis browserspel met een echte, levende stad. Feedback gezocht!

    frio 27 oktober 2026 om 12:22
  • Port Father: beta van een browsergame in Antwerpen 1931, feedback welkom

    Jeroen.G 26 oktober 2026 om 10:33
  • Maffia Hotel: een browsergame waarin je van lobbygast naar spil van het hotel groeit

    eeyk 22 oktober 2026 om 18:43
  • Crime Club volledig herschreven vanaf nul

    frio 19 oktober 2026 om 23:57
  • Malavita (nieuwe maffia game, van 0)

    jos 19 oktober 2026 om 23:18
  • Herkent deze Notion-structuurscan echte problemen?

    Jeroen.G 19 oktober 2026 om 15:09

Marktplaats

  • [Aanbod] Stadskaart voor je browsergame: van menu naar klikbare stad, vanaf €200

    frio 29 oktober 2026 om 18:17
  • [Verkoop] G4G (Gangsters 4 Gangsters): volledige broncode, nieuw gebouwd in PHP 8.3 | € 30 per domein

    frio 27 oktober 2026 om 18:54
  • [TE KOOP] Malavita.be [Maffiaspel, gebaseerd op omicidio.nl, unieke code]

    Dpm_x 26 oktober 2026 om 00:22

API Data ophalen

  • Aaron
  • 5 augustus 2017 om 14:21
  • Aaron
    Beheerder
    Berichten
    1.031
    • 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;
    
    
    	}
    }
    Meer tonen


    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);
    ?>
    Meer tonen


    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

  • Gast, wil je besparen op je domeinnamen? (ad)
  • Online
    Luc
    Software Engineer
    Berichten
    1.989
    • 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
    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
    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
    Artikelen
    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
    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 ();
    				}
    		}
    	}
    	
    ?>
    Meer tonen

    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>';
    		}
    		
    ?>
    Meer tonen

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

  • FangorN
    Professional
    Artikelen
    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).

Registratie

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

Nu registreren Aanmelden

ICT Nieuws

  • PHP waarschuwt voor twee ernstige bugs die makkelijk uit te buiten lijken

    Aaron 22 oktober 2026 om 22:19

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

Gebruikers die dit topic bekijken

  • 3 Gasten
  1. Marktplaats
  2. Design
  3. Voorwaarden
  4. Ons team
  5. Leden
  6. Geschiedenis
  7. Regels
  8. Links
  9. Privacyverklaring
  10. Contact
ICTscripters ©2005 - 2026 , goedkope hosting door DiMoWeb.com, BE0558.915.582
Sponsors: Beste kattenhotel provincie Antwerpen
Style: Nexus by cls-design
Stylename
Nexus
Manufacturer
cls-design
Licence
Commercial styles
Help
Supportforum
Visit cls-design