Skip to content

Instantly share code, notes, and snippets.

@ksafranski
Created November 6, 2012 19:31
Show Gist options
  • Select an option

  • Save ksafranski/4026919 to your computer and use it in GitHub Desktop.

Select an option

Save ksafranski/4026919 to your computer and use it in GitHub Desktop.
PHP API Framework
<?php
// HTACCESS:
// ----------------------------------
// Options +FollowSymLinks
// RewriteEngine On
// RewriteCond %{REQUEST_FILENAME} !-f
// RewriteCond %{REQUEST_FILENAME} !-d
// RewriteRule ^ api.php [QSA,L]
header('Content-Type: application/json');
// Data Sources ############################################
// Array of filenames (no .json extension)
$sources = array("data_file1","data_file2");
// Save JSON ###############################################
function saveJSON($data,$src){
$fh = fopen($src.".json", 'w')
or die("Error opening output file");
fwrite($fh, json_encode(array_values($data)));
fclose($fh);
}
// Pick Apart URI ##########################################
$uri = $_SERVER['REQUEST_URI'];
$method = $_SERVER['REQUEST_METHOD'];
$paths = explode('/', $uri);
array_shift($paths);
$last = end($paths);
if(in_array($last,$sources)){
$src = $last;
$id = false;
}else{
array_pop($paths);
$src = end($paths);
$id = $last;
}
// Get JSON ################################################
$str_data = file_get_contents($src.".json");
$data = json_decode($str_data,true);
$uid = "id";
// Handle Functions ########################################
switch ($method) {
// Add/Modify
case 'POST':
$item = array();
foreach($_POST as $key => $val){
// Check for UID
if($key=='id'){
$id = $val;
}
if($val=='false' && strtolower($val)=='false'){
$val = false;
}
$item[$key] = $val;
}
$insert = true;
// Update
foreach ($data as $key => $value) {
if($value['id'] == $id) {
$data[$key] = $item;
$insert = false;
break;
}
}
// New (no id found)
if($insert){
$data[] = $item;
}
// Write File
//var_dump($data);
saveJSON($data,$src);
break;
// Delete a model
case 'DELETE':
foreach ($data as $key => $value) {
if($value['id'] == $id) {
unset($data[$key]);
}
}
saveJSON($data,$src);
break;
// Get collection
case 'GET':
// Get single element
if($id){
foreach ($data as $key => $value) {
if($value['id'] != $id) {
unset($data[$key]);
}
}
}
echo(json_encode(array_values($data)));
break;
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment