SlideShare a Scribd company logo
1 of 29
Prolific Interactive
WRANGLING MOBILE
APIs
Rekindling the Server/Client
Relationship
Hi, I’m Photis Patriotis
Director of Engineering @ Prolific Interactive
Prolific Interactive
prolific interactive
Prolific Interactive
• Products > Apps
• User Experience is King
Our Values
QualityCreativity
Prolific Interactive
Communication
How do engineers fit in?
Prolific Interactive
Mobile API
Android iOS Mobile Web
Unavoidably Cross-Platfrom
Prolific Interactive
BACKEND AS A SERVICE
CONS
• Mostly Proprietary
• External Dependence
• Customization is 2nd
Priority
• Environment Flexibility
PROS
• Quick & Easy Start
• Multi-Platform SDKs
• Freemium
• Scalability and
Administration OOTB
• Plugins
Parse
Prolific Interactive
• JSON / REST / Small Payloads
• Documentation / Testability
• Clarity
• Security
Prolific Interactive
What do we want from our
APIs?
• Synchronize models between platforms
– Keep engineers from implementing in silos
– Establish a common vocabulary
• Developed open-sourced framework that
meets our requirements easily
Prolific Interactive
How did we get these?
Prolific Interactive
SHARING MODELS
Device API
Views
Offline Caching
Security
Scalability
Properties
Relationships
Terminology
Visual
Integrations
Data
Aggregation
Prolific Interactive
• No view
• PHP Based
• Mongodb backed
• Automated iodocs documentation
• Exports to mobile models
• Packaged testing framework
Prolific Interactive
MABI Framework
• Auto-generate as much as possible, but give
control
– REST Controllers
– Documentation
– iOS/JS/Android Models
• Mongodb documents represent Objects
Prolific Interactive
Quick Setup
• Core is Completely Overridable
• Middleware
• Extensions
Prolific Interactive
Extendibility
Prolific Interactive
MODEL CODE EXAMPLE
class Recipe extends MABIModel {
/**
* Unique identifier for the recipe.
*
* @var string
* @field id
*/
public $recipeId;
/**
* The average rating for this recipe across all
users
*
* @var float
*/
public $averageRating;
/**
* @var Food[]
*/
public $foods;
/**
* The rating that the app needs to receive. Only
* filled for the current user
*
* @field external
* @var int
*/
public $myRating;
/**
* All of the ratings for this recipe for all users
*
* @field internal
* @var array
*/
public $ratings;
@var specifies the type
Core string and float examples
Automatically loads Food class (another
Model)
@field annotations add extra field-specific
functions
'external' means that the value is only
output by the API but not stored anywhere
'internal' means that the value is stored
and used by the server but not output by the
API
Prolific Interactive
Prolific Interactive
GENERATED IOS CORE DATA
MABI Model
Core Data
XML
Objective C
Model
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@class Food;
@interface Recipe : NSManagedObject
@property (nonatomic, retain) NSString * recipeId;
@property (nonatomic, retain) NSString * instructions;
@property (nonatomic, retain) NSString * imageURL;
@property (nonatomic, retain) NSString * type;
@property (nonatomic, retain) NSNumber * calorieCategory;
@property (nonatomic, retain) NSNumber * averageRating;
@property (nonatomic, retain) NSNumber * ratingCount;
@property (nonatomic, retain) NSNumber * myRating;
@property (nonatomic, retain) Food *foods;
@end
#import "Recipe.h"
#import "Food.h"
@implementation Recipe
@dynamic recipeId;
@dynamic instructions;
@dynamic imageURL;
@dynamic type;
@dynamic calorieCategory;
@dynamic averageRating;
@dynamic ratingCount;
@dynamic myRating;
@dynamic foods;
@end
Recipe.h Recipe.m
Prolific Interactive
Prolific Interactive
CONTROLLER CODE
/**
* The stats methods contain general aggregate
* numbers for recipes, foods, etc.
*
* @middleware MABIMiddlewareSharedSecret
* @middleware MABIMiddlewareAPIApplicationOnlyAccess
*/
class StatsController extends MABIController {
...
public function getMealCount() {
...
}
public function postNewStat() {
...
}
...
}
Serves GET /stats/mealcount
Defines middleware that
restricts access to anything
in the controller to registered
Applications
Serves POST /stats/newstat
Prolific Interactive
/**
* @docs show-model
*
* Contains the endpoints to get detailed information about a certain recipe, and
also perform actions on it (e.g.
* rate it).
*
* @middleware MABIMiddlewareSharedSecret
* @middleware MABIMiddlewareAPIApplicationOnlyAccess
* @middleware MABIRESTAccessReadOnly
* @middleware MABIIdentityMiddlewareSessionHeader
* @middleware MABIIdentityMiddlewareRESTOwnerOnlyAccess
*/
class RecipeController extends MABIRESTModelController {
...
/**
* Updates the rating that the user gave this recipe using the users's id. If the
user has
* not rated the recipe before, it will add a new rating.
*
* @docs-param rating int body required Should pass in the user's rating for the
Recipe. Must be an integer from 1 to 5.
*/
public function restPostRated() {
...
$this->model->ratings[$userModel->userId] = $rating;
...
}
...
}
Restricts access to only the
read endpoints that can read
objects or collections
Serves POST /recipes/<id>/rated
$this->model is already loaded with a
Recipe Model based on its id
Prolific Interactive
Restricts access to only
logged in users that own
the resource
Prolific Interactive
AUTO-GENERATED
IODOCS
Prolific Interactive
Prolific Interactive
• Testing
• Continuous Integration
• Error Handling
• Admin UIs
• Complex Integrations
• Alternative Data Sources
Prolific Interactive
Advanced
• Automatic setup from Mobile to Server
• Continue adding mobile specific extensions (in-app
purchasing, passbook, etc.)
• Other basic framework features
Prolific Interactive
Future
Summary
Don’t take communication for granted
Drive data definitions across your product
Get things up quickly so everyone can work
Fine-tune your API specifically for mobile
Prolific Interactive
Prolific Interactive
Contact
MABI Framework: https://github.com/prolificinteractive/mabi
photis@prolificinteractive.com
www.prolificinteractive.com

More Related Content

What's hot

Overview of MVC Framework - by software outsourcing company india
Overview of MVC Framework - by software outsourcing company indiaOverview of MVC Framework - by software outsourcing company india
Overview of MVC Framework - by software outsourcing company indiaJignesh Aakoliya
 
Introduction to API Design: REST and Java
Introduction to API Design: REST and JavaIntroduction to API Design: REST and Java
Introduction to API Design: REST and JavaPhilip Johnson
 
Siebel Open UI Debugging (Siebel Open UI Training, Part 7)
Siebel Open UI Debugging (Siebel Open UI Training, Part 7)Siebel Open UI Debugging (Siebel Open UI Training, Part 7)
Siebel Open UI Debugging (Siebel Open UI Training, Part 7)Tech OneStop
 
Customizing the Presentation Model and Physical Renderer in Siebel Open UI
Customizing the Presentation Model and Physical Renderer in Siebel Open UICustomizing the Presentation Model and Physical Renderer in Siebel Open UI
Customizing the Presentation Model and Physical Renderer in Siebel Open UITech OneStop
 
Best Practices for JSF, Gameduell 2013
Best Practices for JSF, Gameduell 2013Best Practices for JSF, Gameduell 2013
Best Practices for JSF, Gameduell 2013Edward Burns
 
API Virtualization: Mocking on Steroids
API Virtualization: Mocking on SteroidsAPI Virtualization: Mocking on Steroids
API Virtualization: Mocking on SteroidsSmartBear
 
Getting Started with Zend Framework
Getting Started with Zend FrameworkGetting Started with Zend Framework
Getting Started with Zend FrameworkJuan Antonio
 
Effective testing of rich internet applications
Effective testing of rich internet applicationsEffective testing of rich internet applications
Effective testing of rich internet applicationsRashwin
 
Spring framework
Spring frameworkSpring framework
Spring frameworkvietduc17
 
Introduction to Ibatis by Rohit
Introduction to Ibatis by RohitIntroduction to Ibatis by Rohit
Introduction to Ibatis by RohitRohit Prabhakar
 
Software Design Principles (SOLID)
Software Design Principles (SOLID)Software Design Principles (SOLID)
Software Design Principles (SOLID)ASIMYILDIZ
 

What's hot (19)

How to tdd your mvp
How to tdd your mvpHow to tdd your mvp
How to tdd your mvp
 
Overview of MVC Framework - by software outsourcing company india
Overview of MVC Framework - by software outsourcing company indiaOverview of MVC Framework - by software outsourcing company india
Overview of MVC Framework - by software outsourcing company india
 
Introduction to API Design: REST and Java
Introduction to API Design: REST and JavaIntroduction to API Design: REST and Java
Introduction to API Design: REST and Java
 
Mule Integration with Atlassian JIRA
Mule Integration with Atlassian JIRAMule Integration with Atlassian JIRA
Mule Integration with Atlassian JIRA
 
Flash Testing with Selenium RC
Flash Testing with Selenium RCFlash Testing with Selenium RC
Flash Testing with Selenium RC
 
Siebel Open UI Debugging (Siebel Open UI Training, Part 7)
Siebel Open UI Debugging (Siebel Open UI Training, Part 7)Siebel Open UI Debugging (Siebel Open UI Training, Part 7)
Siebel Open UI Debugging (Siebel Open UI Training, Part 7)
 
Spring core
Spring coreSpring core
Spring core
 
Customizing the Presentation Model and Physical Renderer in Siebel Open UI
Customizing the Presentation Model and Physical Renderer in Siebel Open UICustomizing the Presentation Model and Physical Renderer in Siebel Open UI
Customizing the Presentation Model and Physical Renderer in Siebel Open UI
 
Best Practices for JSF, Gameduell 2013
Best Practices for JSF, Gameduell 2013Best Practices for JSF, Gameduell 2013
Best Practices for JSF, Gameduell 2013
 
API Virtualization: Mocking on Steroids
API Virtualization: Mocking on SteroidsAPI Virtualization: Mocking on Steroids
API Virtualization: Mocking on Steroids
 
Resume
ResumeResume
Resume
 
Jsf
JsfJsf
Jsf
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Getting Started with Zend Framework
Getting Started with Zend FrameworkGetting Started with Zend Framework
Getting Started with Zend Framework
 
RESUME
RESUMERESUME
RESUME
 
Effective testing of rich internet applications
Effective testing of rich internet applicationsEffective testing of rich internet applications
Effective testing of rich internet applications
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
Introduction to Ibatis by Rohit
Introduction to Ibatis by RohitIntroduction to Ibatis by Rohit
Introduction to Ibatis by Rohit
 
Software Design Principles (SOLID)
Software Design Principles (SOLID)Software Design Principles (SOLID)
Software Design Principles (SOLID)
 

Viewers also liked (18)

Bonavita2
Bonavita2Bonavita2
Bonavita2
 
Evaluation Part 4
Evaluation Part 4Evaluation Part 4
Evaluation Part 4
 
Evaluation Q6
Evaluation Q6Evaluation Q6
Evaluation Q6
 
Evaluation Part 4
Evaluation Part 4Evaluation Part 4
Evaluation Part 4
 
Prince st Tech Talk - MABI Framework
Prince st Tech Talk - MABI FrameworkPrince st Tech Talk - MABI Framework
Prince st Tech Talk - MABI Framework
 
Evaluation Part 4
Evaluation Part 4Evaluation Part 4
Evaluation Part 4
 
Bonavita
BonavitaBonavita
Bonavita
 
O galego está en nós
O galego está en nósO galego está en nós
O galego está en nós
 
4 b nadal alicia
4 b   nadal alicia4 b   nadal alicia
4 b nadal alicia
 
O voceiro do piñeiro manso 2014
O voceiro do piñeiro manso 2014O voceiro do piñeiro manso 2014
O voceiro do piñeiro manso 2014
 
Nadal2011
Nadal2011Nadal2011
Nadal2011
 
Felices festas silvia
Felices festas silviaFelices festas silvia
Felices festas silvia
 
Nadal2011 rosa
Nadal2011 rosaNadal2011 rosa
Nadal2011 rosa
 
Nadal2011
Nadal2011Nadal2011
Nadal2011
 
C de campo2012
C de campo2012C de campo2012
C de campo2012
 
O VOCEIRO DO PIÑEIRO MANSO 2013
O VOCEIRO DO PIÑEIRO MANSO 2013O VOCEIRO DO PIÑEIRO MANSO 2013
O VOCEIRO DO PIÑEIRO MANSO 2013
 
O voceiro do piñeiro manso
O voceiro do piñeiro mansoO voceiro do piñeiro manso
O voceiro do piñeiro manso
 
Bonavita
BonavitaBonavita
Bonavita
 

Similar to Prince sttalkv5

JMP103 : Extending Your App Arsenal With OpenSocial
JMP103 : Extending Your App Arsenal With OpenSocialJMP103 : Extending Your App Arsenal With OpenSocial
JMP103 : Extending Your App Arsenal With OpenSocialRyan Baxter
 
IBM Connect 2014 - JMP103: Extending Your Application Arsenal With OpenSocial
IBM Connect 2014 - JMP103: Extending Your Application Arsenal With OpenSocialIBM Connect 2014 - JMP103: Extending Your Application Arsenal With OpenSocial
IBM Connect 2014 - JMP103: Extending Your Application Arsenal With OpenSocialIBM Connections Developers
 
REST API Best Practices & Implementing in Codeigniter
REST API Best Practices & Implementing in CodeigniterREST API Best Practices & Implementing in Codeigniter
REST API Best Practices & Implementing in CodeigniterSachin G Kulkarni
 
InterConnect 2016 Java EE 7 Overview (PEJ-5296)
InterConnect 2016 Java EE 7 Overview (PEJ-5296)InterConnect 2016 Java EE 7 Overview (PEJ-5296)
InterConnect 2016 Java EE 7 Overview (PEJ-5296)Kevin Sutter
 
Java Test Automation for REST, Web and Mobile
Java Test Automation for REST, Web and MobileJava Test Automation for REST, Web and Mobile
Java Test Automation for REST, Web and MobileElias Nogueira
 
How to code to code less
How to code to code lessHow to code to code less
How to code to code lessAnton Novikau
 
CCI 2019 - PowerApps for Enterprise Developers
CCI 2019 - PowerApps for Enterprise DevelopersCCI 2019 - PowerApps for Enterprise Developers
CCI 2019 - PowerApps for Enterprise Developerswalk2talk srl
 
Dive into Play Framework
Dive into Play FrameworkDive into Play Framework
Dive into Play FrameworkMaher Gamal
 
aOS Moscow - E4 - PowerApps for enterprise developers - Fabio Franzini
aOS Moscow - E4 - PowerApps for enterprise developers - Fabio FranziniaOS Moscow - E4 - PowerApps for enterprise developers - Fabio Franzini
aOS Moscow - E4 - PowerApps for enterprise developers - Fabio FranziniaOS Community
 
SpringBootCompleteBootcamp.pptx
SpringBootCompleteBootcamp.pptxSpringBootCompleteBootcamp.pptx
SpringBootCompleteBootcamp.pptxSUFYAN SATTAR
 
Dev ops for cross platform mobile modeveast 12
Dev ops for cross platform mobile   modeveast 12Dev ops for cross platform mobile   modeveast 12
Dev ops for cross platform mobile modeveast 12Sanjeev Sharma
 
ASP.NET Core Web API documentation web application
ASP.NET Core Web API documentation web applicationASP.NET Core Web API documentation web application
ASP.NET Core Web API documentation web applicationAMARAAHMED7
 
AEM Sightly Deep Dive
AEM Sightly Deep DiveAEM Sightly Deep Dive
AEM Sightly Deep DiveGabriel Walt
 
Taking your “web” app to places you never expected - Ember Fest 2014
Taking your “web” app to places you never expected - Ember Fest 2014Taking your “web” app to places you never expected - Ember Fest 2014
Taking your “web” app to places you never expected - Ember Fest 2014williamsgarth
 
Practices and tools for building better APIs
Practices and tools for building better APIsPractices and tools for building better APIs
Practices and tools for building better APIsNLJUG
 
Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)Peter Hendriks
 
Developing Apps with Azure AD
Developing Apps with Azure ADDeveloping Apps with Azure AD
Developing Apps with Azure ADSharePointRadi
 
Test-Driven Documentation for your REST(ful) service
Test-Driven Documentation for your REST(ful) serviceTest-Driven Documentation for your REST(ful) service
Test-Driven Documentation for your REST(ful) serviceJeroen Reijn
 
Get things done with Yii - quickly build webapplications
Get things done with Yii - quickly build webapplicationsGet things done with Yii - quickly build webapplications
Get things done with Yii - quickly build webapplicationsGiuliano Iacobelli
 

Similar to Prince sttalkv5 (20)

JMP103 : Extending Your App Arsenal With OpenSocial
JMP103 : Extending Your App Arsenal With OpenSocialJMP103 : Extending Your App Arsenal With OpenSocial
JMP103 : Extending Your App Arsenal With OpenSocial
 
IBM Connect 2014 - JMP103: Extending Your Application Arsenal With OpenSocial
IBM Connect 2014 - JMP103: Extending Your Application Arsenal With OpenSocialIBM Connect 2014 - JMP103: Extending Your Application Arsenal With OpenSocial
IBM Connect 2014 - JMP103: Extending Your Application Arsenal With OpenSocial
 
REST API Best Practices & Implementing in Codeigniter
REST API Best Practices & Implementing in CodeigniterREST API Best Practices & Implementing in Codeigniter
REST API Best Practices & Implementing in Codeigniter
 
InterConnect 2016 Java EE 7 Overview (PEJ-5296)
InterConnect 2016 Java EE 7 Overview (PEJ-5296)InterConnect 2016 Java EE 7 Overview (PEJ-5296)
InterConnect 2016 Java EE 7 Overview (PEJ-5296)
 
Java Test Automation for REST, Web and Mobile
Java Test Automation for REST, Web and MobileJava Test Automation for REST, Web and Mobile
Java Test Automation for REST, Web and Mobile
 
How to code to code less
How to code to code lessHow to code to code less
How to code to code less
 
CCI 2019 - PowerApps for Enterprise Developers
CCI 2019 - PowerApps for Enterprise DevelopersCCI 2019 - PowerApps for Enterprise Developers
CCI 2019 - PowerApps for Enterprise Developers
 
Dive into Play Framework
Dive into Play FrameworkDive into Play Framework
Dive into Play Framework
 
aOS Moscow - E4 - PowerApps for enterprise developers - Fabio Franzini
aOS Moscow - E4 - PowerApps for enterprise developers - Fabio FranziniaOS Moscow - E4 - PowerApps for enterprise developers - Fabio Franzini
aOS Moscow - E4 - PowerApps for enterprise developers - Fabio Franzini
 
SpringBootCompleteBootcamp.pptx
SpringBootCompleteBootcamp.pptxSpringBootCompleteBootcamp.pptx
SpringBootCompleteBootcamp.pptx
 
Dev ops for cross platform mobile modeveast 12
Dev ops for cross platform mobile   modeveast 12Dev ops for cross platform mobile   modeveast 12
Dev ops for cross platform mobile modeveast 12
 
ASP.NET Core Web API documentation web application
ASP.NET Core Web API documentation web applicationASP.NET Core Web API documentation web application
ASP.NET Core Web API documentation web application
 
AEM Sightly Deep Dive
AEM Sightly Deep DiveAEM Sightly Deep Dive
AEM Sightly Deep Dive
 
Taking your “web” app to places you never expected - Ember Fest 2014
Taking your “web” app to places you never expected - Ember Fest 2014Taking your “web” app to places you never expected - Ember Fest 2014
Taking your “web” app to places you never expected - Ember Fest 2014
 
Practices and tools for building better APIs
Practices and tools for building better APIsPractices and tools for building better APIs
Practices and tools for building better APIs
 
Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)Practices and tools for building better API (JFall 2013)
Practices and tools for building better API (JFall 2013)
 
Developing Apps with Azure AD
Developing Apps with Azure ADDeveloping Apps with Azure AD
Developing Apps with Azure AD
 
Spring boot
Spring bootSpring boot
Spring boot
 
Test-Driven Documentation for your REST(ful) service
Test-Driven Documentation for your REST(ful) serviceTest-Driven Documentation for your REST(ful) service
Test-Driven Documentation for your REST(ful) service
 
Get things done with Yii - quickly build webapplications
Get things done with Yii - quickly build webapplicationsGet things done with Yii - quickly build webapplications
Get things done with Yii - quickly build webapplications
 

Recently uploaded

Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsPrecisely
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfjimielynbastida
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsAndrey Dotsenko
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 

Recently uploaded (20)

Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power Systems
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 

Prince sttalkv5

  • 2. Hi, I’m Photis Patriotis Director of Engineering @ Prolific Interactive Prolific Interactive
  • 4. Prolific Interactive • Products > Apps • User Experience is King Our Values
  • 6. Prolific Interactive Mobile API Android iOS Mobile Web Unavoidably Cross-Platfrom
  • 8. CONS • Mostly Proprietary • External Dependence • Customization is 2nd Priority • Environment Flexibility PROS • Quick & Easy Start • Multi-Platform SDKs • Freemium • Scalability and Administration OOTB • Plugins Parse Prolific Interactive
  • 9. • JSON / REST / Small Payloads • Documentation / Testability • Clarity • Security Prolific Interactive What do we want from our APIs?
  • 10. • Synchronize models between platforms – Keep engineers from implementing in silos – Establish a common vocabulary • Developed open-sourced framework that meets our requirements easily Prolific Interactive How did we get these?
  • 13. • No view • PHP Based • Mongodb backed • Automated iodocs documentation • Exports to mobile models • Packaged testing framework Prolific Interactive MABI Framework
  • 14. • Auto-generate as much as possible, but give control – REST Controllers – Documentation – iOS/JS/Android Models • Mongodb documents represent Objects Prolific Interactive Quick Setup
  • 15. • Core is Completely Overridable • Middleware • Extensions Prolific Interactive Extendibility
  • 17. class Recipe extends MABIModel { /** * Unique identifier for the recipe. * * @var string * @field id */ public $recipeId; /** * The average rating for this recipe across all users * * @var float */ public $averageRating; /** * @var Food[] */ public $foods; /** * The rating that the app needs to receive. Only * filled for the current user * * @field external * @var int */ public $myRating; /** * All of the ratings for this recipe for all users * * @field internal * @var array */ public $ratings; @var specifies the type Core string and float examples Automatically loads Food class (another Model) @field annotations add extra field-specific functions 'external' means that the value is only output by the API but not stored anywhere 'internal' means that the value is stored and used by the server but not output by the API Prolific Interactive
  • 19. MABI Model Core Data XML Objective C Model #import <Foundation/Foundation.h> #import <CoreData/CoreData.h> @class Food; @interface Recipe : NSManagedObject @property (nonatomic, retain) NSString * recipeId; @property (nonatomic, retain) NSString * instructions; @property (nonatomic, retain) NSString * imageURL; @property (nonatomic, retain) NSString * type; @property (nonatomic, retain) NSNumber * calorieCategory; @property (nonatomic, retain) NSNumber * averageRating; @property (nonatomic, retain) NSNumber * ratingCount; @property (nonatomic, retain) NSNumber * myRating; @property (nonatomic, retain) Food *foods; @end #import "Recipe.h" #import "Food.h" @implementation Recipe @dynamic recipeId; @dynamic instructions; @dynamic imageURL; @dynamic type; @dynamic calorieCategory; @dynamic averageRating; @dynamic ratingCount; @dynamic myRating; @dynamic foods; @end Recipe.h Recipe.m Prolific Interactive
  • 21. /** * The stats methods contain general aggregate * numbers for recipes, foods, etc. * * @middleware MABIMiddlewareSharedSecret * @middleware MABIMiddlewareAPIApplicationOnlyAccess */ class StatsController extends MABIController { ... public function getMealCount() { ... } public function postNewStat() { ... } ... } Serves GET /stats/mealcount Defines middleware that restricts access to anything in the controller to registered Applications Serves POST /stats/newstat Prolific Interactive
  • 22. /** * @docs show-model * * Contains the endpoints to get detailed information about a certain recipe, and also perform actions on it (e.g. * rate it). * * @middleware MABIMiddlewareSharedSecret * @middleware MABIMiddlewareAPIApplicationOnlyAccess * @middleware MABIRESTAccessReadOnly * @middleware MABIIdentityMiddlewareSessionHeader * @middleware MABIIdentityMiddlewareRESTOwnerOnlyAccess */ class RecipeController extends MABIRESTModelController { ... /** * Updates the rating that the user gave this recipe using the users's id. If the user has * not rated the recipe before, it will add a new rating. * * @docs-param rating int body required Should pass in the user's rating for the Recipe. Must be an integer from 1 to 5. */ public function restPostRated() { ... $this->model->ratings[$userModel->userId] = $rating; ... } ... } Restricts access to only the read endpoints that can read objects or collections Serves POST /recipes/<id>/rated $this->model is already loaded with a Recipe Model based on its id Prolific Interactive Restricts access to only logged in users that own the resource
  • 26. • Testing • Continuous Integration • Error Handling • Admin UIs • Complex Integrations • Alternative Data Sources Prolific Interactive Advanced
  • 27. • Automatic setup from Mobile to Server • Continue adding mobile specific extensions (in-app purchasing, passbook, etc.) • Other basic framework features Prolific Interactive Future
  • 28. Summary Don’t take communication for granted Drive data definitions across your product Get things up quickly so everyone can work Fine-tune your API specifically for mobile Prolific Interactive
  • 29. Prolific Interactive Contact MABI Framework: https://github.com/prolificinteractive/mabi photis@prolificinteractive.com www.prolificinteractive.com

Editor's Notes

  1. Can usually be found doingrandom things at happy hourslike dressing up as a 50slifeguard and riding fake blow-up sharks
  2. Want to give a little bit of a background of what we do, and how we’ve reached these issuesMobile Products AgencyDevelop highly functional mobile apps for large clientsRent the RunwayLululemonAs well as startups through our acceleratorFrom the ground up including backend and also lone mobile apps
  3. Apps vsproducts -products are a subset of apps that involve a whole ecosystemUser experience isn’t always just UI, a lot of it is the data and integrations that back itMeet long-term business and user goalsHow do we as engineersdo this?
  4. CreativityWouldn’t be in business without hiring creative individualsQualityWhat clients expectMakes communication easierCommunicationMany people working on complex thingsThe quality/comm combo is what is always tricky.We need to get this right for all of our apps/customers.There are so many mature web practices right now to handle this, but mobile is still pretty fresh in this type of management
  5. These platforms aren’t just a little different/buggy, they’re completely different paradigmsDesigners “should” even redo the design based on how different these areIt seems that the backing API is what is actually the most flexibleI see it as the opportunity to set clear definitions across all of our platformsOne way people are solving this problem is with BAAS solutions
  6. Basically, if you don’t want to/can’t do ANY backend development, this is a good way to go.Not so great if you want to control your product in the long-termThese cons don’t work for us. We want:OwnershipEnvironment FlexibilityFine-tuningWe want full ownership of our code and process. So, we broke down what the most important parts of an API were to our developers and found:
  7. JSON/rest – small packagesBased on nightmare stories from customers and personal preferences we found some common denominators
  8. Why not MVC Frameworks?Views muddy up cleanliness of modelsMake mobile standards easier to implement (throw out things like cookies, html, javascript, etc.)My job is to care about making these things workThe quality and communication mix was handled in a lot of different ways in the past.We know that within an organization having everyone speaking the same language, vocabulary, programming the same way is the best way to do this
  9. No viewModels act like views (different amounts of data)Controllers are strictly endpoint-basedThere will always be massaging to match UI and organize packagesPHP BasedClear OO“Strongly” typedAnnotation Driven shortcutsTransitioning from MVC Frameworks is easyMongodb backedMongodb’s documents are very compatible with how we view useful mobile models look likeWorking on other data sourcesiodocs documentation creationPackaged testing frameworkIn order to quickly set up
  10. This makes us able to get a usable version of the API in minutes. Then the team can smoothly build out the backend as the front end refines the UI
  11. Keep everything overridableMiddlewareSince this framework is communication and process related, middleware plugins are quite usefulSecurity/Access/AuthenticationExtensionsBundle up large portions of functionality including controllers and modelsUsed for things like authentication schemes, email providers, push notification providers, etc.
  12. Admin UisCan be plugged in directly through a database or via the api or split the controllersComplex integrationsLink can be as deep or as shallow as we want itAlternative Data SourcesGlenlivet
  13. More database backingSupport other documentation/testing frameworksJSONP for mobile webCaching/PerformancePartial Model LoadsStrengthen CLI Interface
  14. JSON/rest – small packagesBased on nightmare stories from customers and personal preferences we found some common denominators