36
SERVER SIDE BREAKOUT php Wednesday, November 2, 11

PHP Server-side Breakout

  • Upload
    sencha

  • View
    3.693

  • Download
    0

Embed Size (px)

DESCRIPTION

Understand the approaches and best practices for integrating client side applications - both desktop and mobile - with various server-side technologies.Grgur Grisogono, Modus Create, is a JavaScript lover focused on Ext JS and Sencha Touch. Exploiting the passion as a Sr JavaScript developer at Modus Create. Grgur has architected and developed market leading national, regional, and local development web apps used by 6 governments, 600+ municipalities, and government departments in several European countries. This year, he has organized Sourc{, a hugely successful developer oriented mobile and desktop web app conference, sponsored by Sencha.

Citation preview

Page 1: PHP Server-side Breakout

SERVER SIDE BREAKOUTphp

Wednesday, November 2, 11

Page 2: PHP Server-side Breakout

5 YEARS AGO (2006)

PHP version 5.2.0 native JSON support

Wednesday, November 2, 11

Page 3: PHP Server-side Breakout

MODERN USAGE

77% of all websites

Wednesday, November 2, 11

Page 4: PHP Server-side Breakout

MODERN USAGE

Middleware

Wednesday, November 2, 11

Page 5: PHP Server-side Breakout

INTERFACES

RESTExt.Direct

Wednesday, November 2, 11

Page 6: PHP Server-side Breakout

REST

Great for APIsCross-domain

Status code messagesOne setup for all purposes

echo $json

Wednesday, November 2, 11

Page 7: PHP Server-side Breakout

REST

proxy: { type: 'rest', url: 'api/users' }

Wednesday, November 2, 11

Page 8: PHP Server-side Breakout

REST

Extra server setup may be neededDifficult concurrency (buffering)Requires access to php://input

Wednesday, November 2, 11

Page 9: PHP Server-side Breakout

EXT.DIRECT

OOB bufferingEffortless setup

API integration (RPC)Easier RPC role-based method distribution

return $array

Wednesday, November 2, 11

Page 10: PHP Server-side Breakout

EXT.DIRECT

Ext.ns("Ext.app"); Ext.app.REMOTING_API = { "url":"php\/router.php", "type":"remoting", "actions":{ "TestAction":[ {"name":"doEcho","len":1} ] }};

Wednesday, November 2, 11

Page 11: PHP Server-side Breakout

EXT.DIRECT

proxy: { type: 'direct', directFn: doEcho }

Wednesday, November 2, 11

Page 12: PHP Server-side Breakout

EXT.DIRECT

proxy: { type: 'direct',

api: { create : Rpc.users.Add, read : Rpc.users.List, update : Rpc.users.Update, delete : Rpc.users.Delete

}

Wednesday, November 2, 11

Page 13: PHP Server-side Breakout

EXT.DIRECT

Not cross-domain friendlyNeeds a router (s-s stack)

No file uploadingException stops execution

Wednesday, November 2, 11

Page 14: PHP Server-side Breakout

SAMPLE USAGE RESTFUL INTERFACE

Wednesday, November 2, 11

Page 15: PHP Server-side Breakout

EXT.DIRECT

Wednesday, November 2, 11

Page 16: PHP Server-side Breakout

JSON VS. JSONP

{ ‘name’ : ‘John’, ‘email’ : ‘[email protected]', ‘dob‘ : 19781213, ‘kids‘ : [‘Sarah’, ‘Norah’]}

Ext.util.JSONP.callback1({‘name’ : ‘John’,

‘email’ : ‘[email protected]', ‘dob‘ : 19781213, ‘kids‘ : [‘Sarah’, ‘Norah’]})

Wednesday, November 2, 11

Page 17: PHP Server-side Breakout

JSON VS. JSONP

$callback = $_REQUEST[“callback”];

$select = $db->select()->from('products');$stmt = $select->query();$result = $stmt->fetchAll();$output = json_encode($result);

if ($callback) { header('Content-Type: text/javascript'); echo $callback . '(' . $output . ');';} else { header('Content-Type: application/x-json'); echo $output;}

Wednesday, November 2, 11

Page 18: PHP Server-side Breakout

BIG APPS

Big apps

Wednesday, November 2, 11

Page 19: PHP Server-side Breakout

BIG APPS

MVCFat model - thin controller

Wednesday, November 2, 11

Page 20: PHP Server-side Breakout

BIG APPS

Abstracting

Wednesday, November 2, 11

Page 21: PHP Server-side Breakout

LOADING APP COMPONENTS

Ext.LoaderSencha command / jsbuilder on the fly

Wednesday, November 2, 11

Page 22: PHP Server-side Breakout

ENVIRONMENT

Apache

Wednesday, November 2, 11

Page 23: PHP Server-side Breakout

ENVIRONMENT

Apache+

Nginx reverse proxy

Wednesday, November 2, 11

Page 24: PHP Server-side Breakout

ENVIRONMENT

SetEnv APP_ENV "development"

$_SERVER['APP_ENV'])

Wednesday, November 2, 11

Page 25: PHP Server-side Breakout

ENVIRONMENT

MIME handling

JSONP : application/javascriptJSON : application/jsonappcache : text/cache-manifest

Wednesday, November 2, 11

Page 26: PHP Server-side Breakout

ENVIRONMENT

File structure

Wednesday, November 2, 11

Page 27: PHP Server-side Breakout

Wednesday, November 2, 11

Page 28: PHP Server-side Breakout

ENVIRONMENT

DB layout

Wednesday, November 2, 11

Page 29: PHP Server-side Breakout

TRADITIONAL RELATIONAL MODEL

Wednesday, November 2, 11

Page 30: PHP Server-side Breakout

CENTRALIZED RELATIONAL MODEL

Wednesday, November 2, 11

Page 31: PHP Server-side Breakout

Wednesday, November 2, 11

Page 32: PHP Server-side Breakout

FIREPHP

$logger = new Zend_Log();$writer = new Zend_Log_Writer_Firebug();$logger->addWriter($writer);Zend_Registry::set('logger',$logger);

Wednesday, November 2, 11

Page 33: PHP Server-side Breakout

FIREPHP

$select = $ssoDb->select() ->from('products');

$logger->log($select->__toString(), Zend_Log::INFO);$logger->log($data, Zend_Log::INFO);

Wednesday, November 2, 11

Page 34: PHP Server-side Breakout

BAD IDEAS

Enclose entire class in a single try/catch blockUse sleep to wait for another task/thread to finish

Setting global vars to return multiple valuesAltering framework files

Performing DB aggregate operations in PHPKeeping connections open

Wednesday, November 2, 11

Page 35: PHP Server-side Breakout

BAD IDEAS

Using self-made cyphers for encryptionClear text passwords, CC info, personal details (inc names)

Not checking for user credentials on every requestTrusting client-side input validation

Constructing sql queries by using concatenation Not using DB transactions on multiple changes

Direct access to files for download

Wednesday, November 2, 11

Page 36: PHP Server-side Breakout

Grgur Grisogono@ggrgur

Wednesday, November 2, 11