Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Optimizing existing APIs using Laravel and Docker - Serbian

Optimizing existing APIs using Laravel and Docker - Serbian

The modern web is getting more and more complex. Startups are relying on third party APIs to enrich their applications with various information. On the UX side of things, users are expecting maximum quality applications, especially when it comes to speed. In this talk, we will cover how to use Laravel to "wrap" multiple APIs (even our own) to speed up user requests and make our applications API platform independent.

Bogdan Habic

March 23, 2016
Tweet

More Decks by Bogdan Habic

Other Decks in Programming

Transcript

  1. API GATEWAY ▸ Authentication ▸ Transport security ▸ Load-balancing ▸

    Request dispatching (including fault tolerance and service discovery) ▸ Dependency resolution ▸ Transport transformations
  2. API GATEWAY ▸ Authentication ▸ Bla bla ▸ Dependency resolution

    ▸ Oh look, I’m a bullet point ▸ Load-balancing ▸ What does all of this mean ▸ Request dispatching (including fault tolerance and service discovery) ▸ Who is even gonna read this… ▸ Transport transformations ▸ Sorry, I use humor to deflect my insecurities. Plus, I’m hilarious, so don’t hate.
  3. $app->get('/cafes-nearby', ['middleware' => 'auth', function (Request $request) { $user =

    $request->user(); $curl = curl_init(“https://graph.facebook.com/search?q=coffee& %20type=place&center={$user->getLocation()}&distance=500”); $result = curl_exec($curl); curl_close($curl); return response()->json(json_decode($result, true)); }]);
  4. $app->get('/cafes-nearby', ['middleware' => 'auth', function (Request $request) { $user =

    $request->user(); $curl = curl_init(“https://graph.facebook.com/search?q=coffee& %20type=place&center={$user->getLocation()}&distance=500”); $result = curl_exec($curl); curl_close($curl); return response()->json(json_decode($result, true)); }]);
  5. $app->get('/cafes-nearby', ['middleware' => 'auth', function (Request $request) { $user =

    $request->user(); $userLocation = $user->getLocation(); $facebook = curl_init(“https://graph.facebook.com/search?q=coffee& %20type=place&center={$location}&distance=500”); $foursquare = curl_init(“https://api.foursquare.com/v2/venues/search? ll={$location}”); $resultFacebook = curl_exec($facebook); $resultFoursquare = curl_exec($foursquare); curl_close($facebook); curl_close($foursquare); return response()->json(ApiMerger::merge([$resultFacebook, $resultFoursquare])); }]);
  6. function multiRequest($urls) { $curlHandels = []; $result = []; foreach($urls

    as $url) { $singleHandle = curl_init($url); $curlHandels[] = $singleHandle; curl_multi_add_handle($singleHandle, $singleHandle); } $running = null; do { curl_multi_exec($multiHandle, $running); } while($running > 0); foreach($curlHandles can $singleHandle)) { $result[] curl_multi_getcontent($singleHandle); } . . . return $result; }
  7. $curlHandels = []; $result = []; foreach($urls as $url) {

    $singleHandle = curl_init($url); $curlHandels[] = $singleHandle; curl_multi_add_handle($singleHandle, $singleHandle); }
  8. $app->get('/cafes-nearby', ['middleware' => 'auth', function (Request $request) { $user =

    $request->user(); $userLocation = $user->getLocation(); $facebook = “https://graph.facebook.com/search?q=coffee& %20type=place&center={$location}&distance=500”; $foursquare = “https://api.foursquare.com/v2/venues/search?ll={$location}”; return response()->json(ApiMerger::merge([ $facebook, $foursquare, ])); }]);
  9. FROM php:5.5-fpm-alpine RUN apk --update add libmcrypt-dev php-memcache \ &&

    docker-php-ext-install mcrypt mbstring tokenizer mysqli \ && rm -rf /var/cache/apk/* ADD myApp /src/app
  10. RUN apk --update add libmcrypt-dev php-memcache \ && docker-php-ext-install mcrypt

    mbstring tokenizer mysqli \ && rm -rf /var/cache/apk/*
  11. FROM php:5.5-fpm-alpine RUN apk --update add libmcrypt-dev php-memcache \ &&

    docker-php-ext-install mcrypt mbstring tokenizer mysqli \ && rm -rf /var/cache/apk/* ADD myApp /src/app
  12. nginx: build: nginx command: nginx -g "daemon off;" links: -

    php ports: - "80:80" php: build: api-gateway working_dir: /src/app command: php-fpm links: - db - cache ports: - "9000:9000" db: image: mysql ports: - "3306:3306" cache: image: memcached