Dziś w skrócie sposób na konsumpcję danych z serwisu za pomocą REST API z Swift 3 (bo jest lekki). Korzystam z framewok Foundation i zapisuję odczytane dane w sesji:
let session = URLSession(configuration: URLSessionConfiguration.default)
let task = session.dataTask(with: URL(string: „adres webserwisu json”)!, completionHandler: { (data, response, error) in if error != nil { print(error!.localizedDescription) } else { do { if let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any] { print(json) } } catch { print(„błąd w JSONSerialization”) } } }) task.resume()
Bardzo proste. Teraz czas na webserwis na serwerze udostępniający dane w php. Nie będzie korzystał z żadnych bibliotek i frameworków. Ma udostępniać dane teleadresowe sklepów obsługujących TAX FREE, tylko tyle. Potrzebne mi dane geolokacyjne, aby pokazać to na mapie, czyli tworzę klasę z takimi danymi oraz dwie metody, które mają zwracać wszystkie sklepy oraz parametryzowaną liczbę sklepów w pobliżu urządzenia:
<?php Class Shop { private $name,$NIP,$adress,$longitude,$latitude;
public function getAllShops(){}
public function getShops($count,$longitude,$latitude){} } ?>
Ciało metod do wypełnienia jak utworzę bazę danych w MySQL, bo hosting przewiduję na linuksie. Teraz zastanawiałam się czy zostawić to tak, że dostęp do url-a oraz parametry przekazywać za pomocą GET czy zmienić na ładniejsze adresy. Wybieram oczywiście to drugie. Dlatego w /.htaccess zmieniam przekierowanie:
# Turn rewrite engine on Options +FollowSymlinks
RewriteEngine on # map neat URL to internal URL
RewriteRule ^shops/ ShopController.php [nc,qsa]
RewriteRule ^shops/([^/]+)/([^/]+)$ ShopController.php?lon=$1&lat=$2&count=$3 [L]
Teraz ShopController.php, w którym również przechwytuję wyjątki (klasa ShopRestHandler):
<?php
require_once(„ShopRestHandler.php”);
$lon = „”;
$lat = „”;
$count = „”;
if(isset($_GET[„lon”])) $lon = $_GET[„lon”];
if(isset($_GET[„lat”])) $lon = $_GET[„lat”];
if(isset($_GET[„count”])) $count = $_GET[„count”];
$shopRestHandler = new ShopRestHandler();
if (strlen($lon)>0 && strlen($lon)>0 && strlen($id)>0) {$shopRestHandler->getAllShops();}
else $shopRestHandler->getShops($count,$lon,$lat);
?>
Reszta jutro.