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

Effective testing of rich internet applications
Effective testing of rich internet applicationsEffective testing of rich internet applications
Effective testing of rich internet applications
Rashwin
 

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)
 

Similar to Prince st Tech Talk - MABI Framework

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
AMARAAHMED7
 
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
NLJUG
 

Similar to Prince st Tech Talk - MABI Framework (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

Recently uploaded (20)

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 

Prince st Tech Talk - MABI Framework

  • 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