Eigen API Maken
Ik heb een website waar je promo's kan ingeven, en dit kunnen de mensen huren.
Tegenwoordig zet ik ook de pagina's online, deze kunnen ze op hun eigen host plaatsten.
Nu vragen ze om de database structuur, en de gegevens van daaruit.
Omdat ik niet de gegevens van de gebruikers wil vrijgeven, en eigenlijk ook wat controle wil hebben over wie mijn 'website' gebruikt, zat ik te denken aan een API (Een API zoals Facebook & twitter).
Deze zou in PHP & Javascript mogelijk moeten zijn (PHP voor de webbrowsers, en later voor de App).
Liefst eerst in PHP.
Ik weet totaal niet hoe ik hier aan begin.
Kan iemand me een paar handige links geven?
Of misschien uitleggen hoe dit werkt?
Want, je krijgt een key en een secret key. En die moet ik eerst controleren.
Is de key van de ene groep, dan mag hij alleen gegevens van die groep ophalen!
Dus alleen de gebruikers van die groep.
Ik hoop dat ik wat duidelijk ben, zoniet hoor ik het wel.
Alvast bedankt voor de moeite!
Diov
een api maken is eigenlijk vrij makkelijk. feitelijk werkt het het zelfde als een gewone webpagina opvragen. je hebt de juiste url nodig en je moet de juiste parameters meegeven. bijvoorbeeld www.diov.nl/api/userlist?pass=123
het verschil is wel dat je op deze url geen html teruggeeft maar of xml of json. Ik zou voor de laatste kiezen.
Het is natuurlijk belangrijk dat je voor je gebruikers dan een duidelijke handleiding schrijft .
http://en.wikipedia.org/wiki/Representational_state_transfer) ga je al ver komen.
Met eens te kijken naar REST (Gewijzigd op 22/08/2013 21:34:53 door Jens V
Als je OO PHP kan, kijk dan zeker ook eens naar SOAP. Zeer makkelijk en handig te beveiligen...
hier een kleine opzet:
userlist.php:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
$users = array(
array(
'name' => 'Frank',
'email' => '[email protected]',
'age' => 44
),
array(
'name' => 'Jaap',
'email' => '[email protected]',
'age' => 33
),
array(
'name' => 'Wendy',
'email' => '[email protected]',
'age' => 21
)
);
$output = array(
'userlist' => $users,
'status' => 'success'
);
header('Content-type: application/json');
echo json_encode($output,JSON_PRETTY_PRINT);
?>
$users = array(
array(
'name' => 'Frank',
'email' => '[email protected]',
'age' => 44
),
array(
'name' => 'Jaap',
'email' => '[email protected]',
'age' => 33
),
array(
'name' => 'Wendy',
'email' => '[email protected]',
'age' => 21
)
);
$output = array(
'userlist' => $users,
'status' => 'success'
);
header('Content-type: application/json');
echo json_encode($output,JSON_PRETTY_PRINT);
?>
index.php:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
// zorg dat hij userlist.php kan vinden !!!
$serverurl = 'http://127.0.0.1/userlist.php';
if(!$json = @file_get_contents($serverurl)) {
echo 'No data received, please make sure connection is working and requested API exists';
exit;
}
$obj = json_decode($json);
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>json API example</title>
</head>
<body>
<p>Found <?php echo count($obj->userlist); ?> users.</p>
<p>Name of first user in the array: <?php echo $obj->userlist[0]->name; ?></p>
<p>Status: <?php echo $obj->status; ?></p>
</body>
</html>
// zorg dat hij userlist.php kan vinden !!!
$serverurl = 'http://127.0.0.1/userlist.php';
if(!$json = @file_get_contents($serverurl)) {
echo 'No data received, please make sure connection is working and requested API exists';
exit;
}
$obj = json_decode($json);
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>json API example</title>
</head>
<body>
<p>Found <?php echo count($obj->userlist); ?> users.</p>
<p>Name of first user in the array: <?php echo $obj->userlist[0]->name; ?></p>
<p>Status: <?php echo $obj->status; ?></p>
</body>
</html>
Sorry dat ik niet meteen reageerde op jullie antwoorden, ik had ze wel al gelezen.
Ik weet nu hoe het werkt, maar dan heb ik nog een paar vraagjes:
-> Ik wil met een key & secret key werken, want niet iedereen mag de gegevens van de gebruikers weten. Moet ik dan deze sleutels telkens ook meesturen, en telkens mee checken?? Of hoe doe je dit?
-> Ik wil ook dat ze zelf query's kunnen maken, maar deze moeten dan beveiligd worden.
Je kan alleen selecteren van je eigen groep,
Alleen leden wijzigen van je eigen groep,
Alleen 1 lid per keer verwijderen van je eigen groep.
etc.
Hoe controleer ik dit het best?
Mvg,
Diov
Wordt allemaal via GET meegestuurd.
www.domain.com/api/username=Diov&key=dfajmdfjdf5d5fad5fdf&host=diov&action=userlist
Zoiets dan?
Dan stuur ik telkens de key mee, per keer ik iets wil opvragen?
En kunnen ze dan de key niet onderscheppen?
Of is de key per gebruiker uniek? Of per 'App'?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$username = $_GET['username'];
$key = $_GET['key'];
$host = $_GET['host'];
$action = $_GET['action'];
//Als gebruikersnaam niet gelijk is aan 'Diov'
if ($username != 'Doiv') {
echo 'Foute Gebruikersnaam';
}
//Als de key niet gelijk is aan 'dfajmdfjdf5d5fad5fdf'
elseif ($key != 'dfajmdfjdf5d5fad5fdf') {
echo 'Foute Key';
}
//Als de host niet gelijk is aan 'Diov'
elseif ($host != 'Diov') {
echo 'Foute Host';
}
//Als de actie gelijk is aan 'userlist'
elseif ($action == 'userlist') {
echo 'Hier komt de lijst met leden';
}
// Anders is de actie fout:
else {
echo 'Foute actie';
}
?>
$username = $_GET['username'];
$key = $_GET['key'];
$host = $_GET['host'];
$action = $_GET['action'];
//Als gebruikersnaam niet gelijk is aan 'Diov'
if ($username != 'Doiv') {
echo 'Foute Gebruikersnaam';
}
//Als de key niet gelijk is aan 'dfajmdfjdf5d5fad5fdf'
elseif ($key != 'dfajmdfjdf5d5fad5fdf') {
echo 'Foute Key';
}
//Als de host niet gelijk is aan 'Diov'
elseif ($host != 'Diov') {
echo 'Foute Host';
}
//Als de actie gelijk is aan 'userlist'
elseif ($action == 'userlist') {
echo 'Hier komt de lijst met leden';
}
// Anders is de actie fout:
else {
echo 'Foute actie';
}
?>
Getest en het werkt;)
De Host & De key,
Dat kunnen ze anderen dat toch achterhalen?
Php is een serverside taal, die kan niet uit de code worden uitgelezen. Zolang alles niet wordt doorgegeven, komen andere hier niet in. Tenzij ze natuurlijk alles goed invullen.
Of via een oAuth-systeem waarbij die key's in een header (geloof ik) worden verpakt.
Alle Requests kan je toch volgen via webmaster tools?
Dan zien ze meteen die link? Of heb ik het mis?
Edit: Zag de reactie te laat van Aar, ff kijken naar oAuth..
Gewijzigd op 23/08/2013 15:24:58 door - Diov -
Op http://teacherdutch.webatu.com/login_succes/level/test.php staat mijn bovenstaande script, nu alleen met aangepaste delen. De actie is userlist, de rest heb ik veranderd. Ik zou zeggen: Test uit of je dat kan inzien.
Voorbeeld link: http://teacherdutch.webatu.com/login_succes/level/test.php?username=Diov&key=ds22fgf3&host=Test&action=userlist
Idd, ik zie de key niet.
Misschien is dit toch wel de oplossing!
Ik zal het nu ook is proberen met 2 verschillende website's
Prima, ik hoor het wel als er nog vragen zijn.
- Diov - op 23/08/2013 15:24:27:
Hmmmm,
Alle Requests kan je toch volgen via webmaster tools?
Dan zien ze meteen die link? Of heb ik het mis?
Edit: Zag de reactie te laat van Aar, ff kijken naar oAuth..
Alle Requests kan je toch volgen via webmaster tools?
Dan zien ze meteen die link? Of heb ik het mis?
Edit: Zag de reactie te laat van Aar, ff kijken naar oAuth..
Maar geen requests via de server zelf ;-)
Nu nog 2 vraagjes:
Twitter en Facebook gebruiken 2 keys: Secret & Public key?
Waarom?
En hoe laat ik de gebruikers query's opbouwen?
En wat bedoel je precies met gebruikers query's opbouwen?
-> Ik wil ook dat ze zelf query's kunnen maken, maar deze moeten dan beveiligd worden.
Je kan alleen selecteren van je eigen groep,
Alleen leden wijzigen van je eigen groep,
Alleen 1 lid per keer verwijderen van je eigen groep.
etc.
Je weet toch wel hoe Mysql(i) werkt? Dan kan je met SELECT dingen selecteren, UPDATE dingen aanpassen, INSERT dingen toevoegen, en DELETE dingen deleten.