SlideShare a Scribd company logo
1 of 38
Download to read offline
BUILDING A SERVER WITH
FLASK
AGENDA
Client-Server Communication
Building a Custom Backend
Flask / MongoDB
Defining a Server API
Development Technique
CLIENT-SERVER
COMMUNICATION
CLIENT-SERVER
COMMUNICATION
1. Serialization
2. Network Requests
SERIALIZATION
Transforming in-memory object graphs into a
linear sequence of data that can be stored on
disk or sent over a network
SERIALIZATION
User User
Product Product
Product
Product
Object Graph Serialized Document
{
UserID: 934235,
Username: "Ben-G",
Purchases:
[
{
ProductID: 1278123,
Price: 99,
Name: "Apple TV"
}
],
[
{
ProductID: 7238483,
Price: 299,
Name: "Kitchen Set"
}
],
}
Serialization
SERVER ARCHITECTURE &
REQUEST LIFECYCLE
CLASSIC 3-TIER ARCHITECTURE
Client is a “thin client” only taking care of
representation
The actual logic of the application is
implemented on the server
Representation
Business Logic
Persistence
Client
Server
DB
Network Requests
Insert, Select, Update,
Delete
MODERN 3-TIER ARCHITECTURE
Client
Server
DB
HTTP Requests /
Responses
Insert, Select, Update,
Delete
Client has become a “fat client”, in many cases
implementing a significant amount of business logic
Amount of business logic on the server can vary
In Apps that use the Parse Framework, for example,
the Backend only acts as a proxy for the DB
In contrast Twitter has a huge amount of server
logic and less logic on the client
Business Logic
Representation
Business Logic
Persistence
Client
Server
DB
getUsers:
HTTP Request
GET http://myApp/Users
function getUsers {
return db.user.find()
}
DB Request
User1
User2
User3
User4
HTTP Response
[
{
username: “Test1”,
age: 20
},
{
username: “Test2”,
age: 23
},
…
]
User
User
User
User
Parse into Objects
Client
DB
1
2
3
4
5
67
CLIENT-

SERVER

REQUEST
CYCLE
ANATOMY OF AN HTTP REQUEST [1]
HTTP Method
URI
Header Fields
(Authorization, Content-Type)
Body
BUILDING A CUSTOM
BACKEND
WHY?
Education: Writing a custom backend will help
you understand client server communication
Flexibility: Frameworks, such as Parse, don’t
provide the full flexibility of custom solutions, in
many cases it will be necessary to write a custom
backend
HOW?
Flask: a simple framework for web applications
written in python
MongoDB: a document based database
RELATIONAL VS DOCUMENT
BASED DB
BRIEF OVERVIEW
RELATIONAL DB
Strongly denormalized data model → low
redundancy
Besides IDs we don’t have redundant information,
e.g. product name is only stored in one place
If we have a username and want to get the name
of a purchased product we need to JOIN all three
tables
UsernameUserID
USER
Ben-G934235
USER_PURCHASES
ProductIDUserID
1278123934235
7238483934235
232133123233
123233 Daniela
PRODUCT
PriceProductID
991278123
2997238483
679123233
Name
Apple TV
Kitchen Set
Expensive Shoes
RELATIONAL DB
Strict Schema → Application knows exact format of data
stored in DB
Normalized model makes writes easier. Information only
needs to be updated in one place
Frequent JOIN operations are expensive
Strict Schema → Even simple changes need schema
migration
DOCUMENT BASED DB
Mostly strongly denormalized, this means a lot of
redundant information is stored
E.g.: Product Information could be stored directly in
the purchase record, product information is stored
with every single purchase
Faster reading, slower writing
MongoDB has a flexible schema, that means fields
can be added to / omitted from documents
{
UserID: 934235,
Username: "Ben-G",
Purchases:
[
{
ProductID: 1278123,
Price: 99,
Name: "Apple TV"
}
],
[
{
ProductID: 7238483,
Price: 299,
Name: "Kitchen Set"
}
],
}
DOCUMENT BASED DB
Top level hierarchy consists of
collections
Collections contain documents
DB
User
User Collection
User
User User
Location
Location Collection
Location
Location Location
DOCUMENT BASED DB
No Schema → It’s easy to change the data model of an
existing application without needing a migration
Denormalized model makes reads faster, there’s no need to
join different documents
Write operations can be expensive as denormalized data
needs to be updated in multiple places
No Schema → You need to handle different schema versions
on an application level
FLASK
FLASK
A python framework for building web servers
Allows to map different HTTP requests to python
functions
Provides many libraries that we’ll use to speed
up development
DEFINING A SERVER API
DEFINING A SERVER API
Many different ways to structure a backend
server
Will use the one that is currently most common:
RESTful Web Services
RESTFUL WEB SERVICES
Server does not store state of client connection
between requests, all the information necessary
to service the request is provided by client.
There are no server-side sessions.
Web Service is structured based on resources
e.g. a User resource, a Product resource
RESTFUL WEB SERVICES
Each request consists of:
URL - identifies the affected resource
HTTP Method (GET, PUT, etc.) - defines the action
on the resource
Request Body - can contain additional information
on how resource should be affected
RESTFUL WEB SERVICE EXAMPLE
Based on: http://en.wikipedia.org/wiki/Representational_state_transfer
Resource GET PUT POST DELETE
Collection URI, e.g.


http://planly.com/trips
Return list of
trips with
details or list of
trip URIs
Replace entire
collection with
another
collection
Create a new
entry in the
collection
Delete the
entire
collection
Element URI, e.g.


http://planly.com/trips/18
Return a
representation
of specified
item
Replace
specified item
-
Delete the
specified item
DEVELOPMENT TECHNIQUE
TDD
TDD (Test Driven Development) is an approach to
Software Development in which development
starts by writing automated tests before writing
application code
Tests specify the behavior of the application
TDD
Development Cycle with TDD:
1. Write a test for a software feature
2. Run test - test will fail
3. Implement feature
4. Run test - test should succeed
5. Refactor code for implementation
6. Run test - test should succeed
This is often referred to as Red → Green → Refactor
TDD - EXAMPLE TEST CASE
def test_incorrect_credentials(self):
response = self.app.get('/user/',
headers=self.generate_auth_header(
'wrongusername', 'andpassword')
)
self.assertEqual(response.status_code, 401)
SUMMARY
SUMMARY
Many Applications (including ours) use a 3-Tier architecture with a
lightweight server
We are going to implement a server with flask that uses the
document based DBMS MongoDB
We are going to implement a RESTful Web Service that will be
consumed by our iOS application
We will implement the server with TDD, writing tests first and code
second
GETTING STARTED
GETTING STARTED
The dashboard contains a writeup on how to
setup your development environment
It also contains a starter project for your backend
server
REFERENCES
REFERENCES
[1] HTTP Header Field Definitions

More Related Content

What's hot

Building a High-Performance Distributed Task Queue on MongoDB
Building a High-Performance Distributed Task Queue on MongoDBBuilding a High-Performance Distributed Task Queue on MongoDB
Building a High-Performance Distributed Task Queue on MongoDB
MongoDB
 
Java Servlets
Java ServletsJava Servlets
Java Servlets
Nitin Pai
 
Dependency Inversion and Dependency Injection in PHP
Dependency Inversion and Dependency Injection in PHPDependency Inversion and Dependency Injection in PHP
Dependency Inversion and Dependency Injection in PHP
mtoppa
 

What's hot (20)

Big Data Analytics Using Hadoop Cluster On Amazon EMR
Big Data Analytics Using Hadoop Cluster  On Amazon EMRBig Data Analytics Using Hadoop Cluster  On Amazon EMR
Big Data Analytics Using Hadoop Cluster On Amazon EMR
 
Understanding OpenID
Understanding OpenIDUnderstanding OpenID
Understanding OpenID
 
Enable Authentication and Authorization with Azure Active Directory and Sprin...
Enable Authentication and Authorization with Azure Active Directory and Sprin...Enable Authentication and Authorization with Azure Active Directory and Sprin...
Enable Authentication and Authorization with Azure Active Directory and Sprin...
 
Building a High-Performance Distributed Task Queue on MongoDB
Building a High-Performance Distributed Task Queue on MongoDBBuilding a High-Performance Distributed Task Queue on MongoDB
Building a High-Performance Distributed Task Queue on MongoDB
 
Security: Odoo Code Hardening
Security: Odoo Code HardeningSecurity: Odoo Code Hardening
Security: Odoo Code Hardening
 
Odata
OdataOdata
Odata
 
BIG Data & Hadoop Applications in Social Media
BIG Data & Hadoop Applications in Social MediaBIG Data & Hadoop Applications in Social Media
BIG Data & Hadoop Applications in Social Media
 
Web develop in flask
Web develop in flaskWeb develop in flask
Web develop in flask
 
Introduction to SAP Gateway and OData
Introduction to SAP Gateway and ODataIntroduction to SAP Gateway and OData
Introduction to SAP Gateway and OData
 
Fluentd with MySQL
Fluentd with MySQLFluentd with MySQL
Fluentd with MySQL
 
SAP HANA SPS10- SAP HANA Platform Lifecycle Management
SAP HANA SPS10- SAP HANA Platform Lifecycle ManagementSAP HANA SPS10- SAP HANA Platform Lifecycle Management
SAP HANA SPS10- SAP HANA Platform Lifecycle Management
 
Learn to setup a Hadoop Multi Node Cluster
Learn to setup a Hadoop Multi Node ClusterLearn to setup a Hadoop Multi Node Cluster
Learn to setup a Hadoop Multi Node Cluster
 
PHP complete reference with database concepts for beginners
PHP complete reference with database concepts for beginnersPHP complete reference with database concepts for beginners
PHP complete reference with database concepts for beginners
 
Java Servlets
Java ServletsJava Servlets
Java Servlets
 
SAP HANA Timeline
SAP HANA TimelineSAP HANA Timeline
SAP HANA Timeline
 
MongoDB Database Replication
MongoDB Database ReplicationMongoDB Database Replication
MongoDB Database Replication
 
Dependency Inversion and Dependency Injection in PHP
Dependency Inversion and Dependency Injection in PHPDependency Inversion and Dependency Injection in PHP
Dependency Inversion and Dependency Injection in PHP
 
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
 
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
Naver속도의, 속도에 의한, 속도를 위한 몽고DB (네이버 컨텐츠검색과 몽고DB) [Naver]
 
Php Lecture Notes
Php Lecture NotesPhp Lecture Notes
Php Lecture Notes
 

Viewers also liked

Viewers also liked (20)

Client Server Security with Flask and iOS
Client Server Security with Flask and iOSClient Server Security with Flask and iOS
Client Server Security with Flask and iOS
 
Make School 2017 - Mastering iOS Development
Make School 2017 - Mastering iOS DevelopmentMake School 2017 - Mastering iOS Development
Make School 2017 - Mastering iOS Development
 
iOS Layout Overview
iOS Layout OverviewiOS Layout Overview
iOS Layout Overview
 
Layout with Stack View, Table View, and Collection View
Layout with Stack View, Table View, and Collection ViewLayout with Stack View, Table View, and Collection View
Layout with Stack View, Table View, and Collection View
 
Persistence on iOS
Persistence on iOSPersistence on iOS
Persistence on iOS
 
Swift Objective-C Interop
Swift Objective-C InteropSwift Objective-C Interop
Swift Objective-C Interop
 
Standard libraries on iOS
Standard libraries on iOSStandard libraries on iOS
Standard libraries on iOS
 
Intro to Core Data
Intro to Core DataIntro to Core Data
Intro to Core Data
 
Multithreading on iOS
Multithreading on iOSMultithreading on iOS
Multithreading on iOS
 
Intro to iOS Application Architecture
Intro to iOS Application ArchitectureIntro to iOS Application Architecture
Intro to iOS Application Architecture
 
Advanced Core Data
Advanced Core DataAdvanced Core Data
Advanced Core Data
 
Client Server Communication on iOS
Client Server Communication on iOSClient Server Communication on iOS
Client Server Communication on iOS
 
Swift 2 intro
Swift 2 introSwift 2 intro
Swift 2 intro
 
Dependency Management on iOS
Dependency Management on iOSDependency Management on iOS
Dependency Management on iOS
 
Xcode Project Infrastructure
Xcode Project InfrastructureXcode Project Infrastructure
Xcode Project Infrastructure
 
Client Server Synchronization iOS
Client Server Synchronization iOSClient Server Synchronization iOS
Client Server Synchronization iOS
 
Error Handling in Swift
Error Handling in SwiftError Handling in Swift
Error Handling in Swift
 
Localization and Accessibility on iOS
Localization and Accessibility on iOSLocalization and Accessibility on iOS
Localization and Accessibility on iOS
 
Automated Testing on iOS
Automated Testing on iOSAutomated Testing on iOS
Automated Testing on iOS
 
Memory Management on iOS
Memory Management on iOSMemory Management on iOS
Memory Management on iOS
 

Similar to Building a Backend with Flask

Rest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.jsRest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.js
Carol McDonald
 
Pinterest like site using REST and Bottle
Pinterest like site using REST and Bottle Pinterest like site using REST and Bottle
Pinterest like site using REST and Bottle
Gaurav Bhardwaj
 

Similar to Building a Backend with Flask (20)

Greenfield Development with CQRS
Greenfield Development with CQRSGreenfield Development with CQRS
Greenfield Development with CQRS
 
EVOLVE'14 | Enhance | Anshul Chhabra & Akhil Aggrawal | Cisco - AEM High Avai...
EVOLVE'14 | Enhance | Anshul Chhabra & Akhil Aggrawal | Cisco - AEM High Avai...EVOLVE'14 | Enhance | Anshul Chhabra & Akhil Aggrawal | Cisco - AEM High Avai...
EVOLVE'14 | Enhance | Anshul Chhabra & Akhil Aggrawal | Cisco - AEM High Avai...
 
Modern Database Development Oow2008 Lucas Jellema
Modern Database Development Oow2008 Lucas JellemaModern Database Development Oow2008 Lucas Jellema
Modern Database Development Oow2008 Lucas Jellema
 
Fm 2
Fm 2Fm 2
Fm 2
 
How to use Informatica Power Center as a RESTful Web Service Client?
How to use Informatica Power Center as a RESTful Web Service Client?How to use Informatica Power Center as a RESTful Web Service Client?
How to use Informatica Power Center as a RESTful Web Service Client?
 
4. aws enterprise summit seoul 기존 엔터프라이즈 it 솔루션 클라우드로 이전하기 - thomas park
4. aws enterprise summit seoul   기존 엔터프라이즈 it 솔루션 클라우드로 이전하기 - thomas park4. aws enterprise summit seoul   기존 엔터프라이즈 it 솔루션 클라우드로 이전하기 - thomas park
4. aws enterprise summit seoul 기존 엔터프라이즈 it 솔루션 클라우드로 이전하기 - thomas park
 
Building event-driven Serverless Apps with Azure Functions and Azure Cosmos DB
Building event-driven Serverless Apps with Azure Functions and Azure Cosmos DBBuilding event-driven Serverless Apps with Azure Functions and Azure Cosmos DB
Building event-driven Serverless Apps with Azure Functions and Azure Cosmos DB
 
[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client Manager
[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client Manager[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client Manager
[drupalday2017] - Drupal come frontend che consuma servizi: HTTP Client Manager
 
Cics web interface new
Cics web interface newCics web interface new
Cics web interface new
 
Rest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.jsRest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.js
 
Rest
RestRest
Rest
 
02 api gateway
02 api gateway02 api gateway
02 api gateway
 
How to use Informatica Power Center as a RESTful Web Service Client?
How to use Informatica Power Center as a RESTful Web Service Client?How to use Informatica Power Center as a RESTful Web Service Client?
How to use Informatica Power Center as a RESTful Web Service Client?
 
The Story of How an Oracle Classic Stronghold successfully embraced SOA
The Story of How an Oracle Classic Stronghold successfully embraced SOAThe Story of How an Oracle Classic Stronghold successfully embraced SOA
The Story of How an Oracle Classic Stronghold successfully embraced SOA
 
Accessing REST & Backend as a Service (BaaS) - Developer Direct - Mobile Summ...
Accessing REST & Backend as a Service (BaaS) - Developer Direct - Mobile Summ...Accessing REST & Backend as a Service (BaaS) - Developer Direct - Mobile Summ...
Accessing REST & Backend as a Service (BaaS) - Developer Direct - Mobile Summ...
 
MSFT Dumaguete 061616 - Building High Performance Apps
MSFT Dumaguete 061616 - Building High Performance AppsMSFT Dumaguete 061616 - Building High Performance Apps
MSFT Dumaguete 061616 - Building High Performance Apps
 
AWS Data Pipeline Tutorial | AWS Tutorial For Beginners | AWS Certification T...
AWS Data Pipeline Tutorial | AWS Tutorial For Beginners | AWS Certification T...AWS Data Pipeline Tutorial | AWS Tutorial For Beginners | AWS Certification T...
AWS Data Pipeline Tutorial | AWS Tutorial For Beginners | AWS Certification T...
 
Wisconsin .NET UG - Windows Azure
Wisconsin .NET UG - Windows AzureWisconsin .NET UG - Windows Azure
Wisconsin .NET UG - Windows Azure
 
Pinterest like site using REST and Bottle
Pinterest like site using REST and Bottle Pinterest like site using REST and Bottle
Pinterest like site using REST and Bottle
 
Expedite the development lifecycle with MongoDB and serverless - DEM02 - Sant...
Expedite the development lifecycle with MongoDB and serverless - DEM02 - Sant...Expedite the development lifecycle with MongoDB and serverless - DEM02 - Sant...
Expedite the development lifecycle with MongoDB and serverless - DEM02 - Sant...
 

Recently uploaded

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 

Recently uploaded (20)

Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 

Building a Backend with Flask

  • 1.
  • 2. BUILDING A SERVER WITH FLASK
  • 3. AGENDA Client-Server Communication Building a Custom Backend Flask / MongoDB Defining a Server API Development Technique
  • 6. SERIALIZATION Transforming in-memory object graphs into a linear sequence of data that can be stored on disk or sent over a network
  • 7. SERIALIZATION User User Product Product Product Product Object Graph Serialized Document { UserID: 934235, Username: "Ben-G", Purchases: [ { ProductID: 1278123, Price: 99, Name: "Apple TV" } ], [ { ProductID: 7238483, Price: 299, Name: "Kitchen Set" } ], } Serialization
  • 9. CLASSIC 3-TIER ARCHITECTURE Client is a “thin client” only taking care of representation The actual logic of the application is implemented on the server Representation Business Logic Persistence Client Server DB Network Requests Insert, Select, Update, Delete
  • 10. MODERN 3-TIER ARCHITECTURE Client Server DB HTTP Requests / Responses Insert, Select, Update, Delete Client has become a “fat client”, in many cases implementing a significant amount of business logic Amount of business logic on the server can vary In Apps that use the Parse Framework, for example, the Backend only acts as a proxy for the DB In contrast Twitter has a huge amount of server logic and less logic on the client Business Logic Representation Business Logic Persistence
  • 11. Client Server DB getUsers: HTTP Request GET http://myApp/Users function getUsers { return db.user.find() } DB Request User1 User2 User3 User4 HTTP Response [ { username: “Test1”, age: 20 }, { username: “Test2”, age: 23 }, … ] User User User User Parse into Objects Client DB 1 2 3 4 5 67 CLIENT-
 SERVER
 REQUEST CYCLE
  • 12. ANATOMY OF AN HTTP REQUEST [1] HTTP Method URI Header Fields (Authorization, Content-Type) Body
  • 14. WHY? Education: Writing a custom backend will help you understand client server communication Flexibility: Frameworks, such as Parse, don’t provide the full flexibility of custom solutions, in many cases it will be necessary to write a custom backend
  • 15. HOW? Flask: a simple framework for web applications written in python MongoDB: a document based database
  • 16. RELATIONAL VS DOCUMENT BASED DB BRIEF OVERVIEW
  • 17. RELATIONAL DB Strongly denormalized data model → low redundancy Besides IDs we don’t have redundant information, e.g. product name is only stored in one place If we have a username and want to get the name of a purchased product we need to JOIN all three tables UsernameUserID USER Ben-G934235 USER_PURCHASES ProductIDUserID 1278123934235 7238483934235 232133123233 123233 Daniela PRODUCT PriceProductID 991278123 2997238483 679123233 Name Apple TV Kitchen Set Expensive Shoes
  • 18. RELATIONAL DB Strict Schema → Application knows exact format of data stored in DB Normalized model makes writes easier. Information only needs to be updated in one place Frequent JOIN operations are expensive Strict Schema → Even simple changes need schema migration
  • 19. DOCUMENT BASED DB Mostly strongly denormalized, this means a lot of redundant information is stored E.g.: Product Information could be stored directly in the purchase record, product information is stored with every single purchase Faster reading, slower writing MongoDB has a flexible schema, that means fields can be added to / omitted from documents { UserID: 934235, Username: "Ben-G", Purchases: [ { ProductID: 1278123, Price: 99, Name: "Apple TV" } ], [ { ProductID: 7238483, Price: 299, Name: "Kitchen Set" } ], }
  • 20. DOCUMENT BASED DB Top level hierarchy consists of collections Collections contain documents DB User User Collection User User User Location Location Collection Location Location Location
  • 21. DOCUMENT BASED DB No Schema → It’s easy to change the data model of an existing application without needing a migration Denormalized model makes reads faster, there’s no need to join different documents Write operations can be expensive as denormalized data needs to be updated in multiple places No Schema → You need to handle different schema versions on an application level
  • 22. FLASK
  • 23. FLASK A python framework for building web servers Allows to map different HTTP requests to python functions Provides many libraries that we’ll use to speed up development
  • 25. DEFINING A SERVER API Many different ways to structure a backend server Will use the one that is currently most common: RESTful Web Services
  • 26. RESTFUL WEB SERVICES Server does not store state of client connection between requests, all the information necessary to service the request is provided by client. There are no server-side sessions. Web Service is structured based on resources e.g. a User resource, a Product resource
  • 27. RESTFUL WEB SERVICES Each request consists of: URL - identifies the affected resource HTTP Method (GET, PUT, etc.) - defines the action on the resource Request Body - can contain additional information on how resource should be affected
  • 28. RESTFUL WEB SERVICE EXAMPLE Based on: http://en.wikipedia.org/wiki/Representational_state_transfer Resource GET PUT POST DELETE Collection URI, e.g. 
 http://planly.com/trips Return list of trips with details or list of trip URIs Replace entire collection with another collection Create a new entry in the collection Delete the entire collection Element URI, e.g. 
 http://planly.com/trips/18 Return a representation of specified item Replace specified item - Delete the specified item
  • 30. TDD TDD (Test Driven Development) is an approach to Software Development in which development starts by writing automated tests before writing application code Tests specify the behavior of the application
  • 31. TDD Development Cycle with TDD: 1. Write a test for a software feature 2. Run test - test will fail 3. Implement feature 4. Run test - test should succeed 5. Refactor code for implementation 6. Run test - test should succeed This is often referred to as Red → Green → Refactor
  • 32. TDD - EXAMPLE TEST CASE def test_incorrect_credentials(self): response = self.app.get('/user/', headers=self.generate_auth_header( 'wrongusername', 'andpassword') ) self.assertEqual(response.status_code, 401)
  • 34. SUMMARY Many Applications (including ours) use a 3-Tier architecture with a lightweight server We are going to implement a server with flask that uses the document based DBMS MongoDB We are going to implement a RESTful Web Service that will be consumed by our iOS application We will implement the server with TDD, writing tests first and code second
  • 36. GETTING STARTED The dashboard contains a writeup on how to setup your development environment It also contains a starter project for your backend server
  • 38. REFERENCES [1] HTTP Header Field Definitions