SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Сам собі паблішер. Від сайту ігрової студії до
універсального back-end провайдера і сервісу
публікації ігор.
Leonid Kuzmin
EFORB GAMEBOX
REST and RESTful API
RESTful API adhere to the REST architectural constraints.
REST is not a protocol, but architectural style
• Client-Server – determined by environment
REST Architectural Constraints
applied to web services
REST and
RESTful API
• Client-Server – determined by environment
• Stateless – data needed for authentication included in every request
headers (e.g. Cookies)
REST Architectural Constraints
applied to web services
REST and
RESTful API
• Client-Server – determined by environment
• Stateless – data needed for authentication included in every request
headers (e.g. Cookies)
• Cacheable – HTTP cache control headers
REST Architectural Constraints
applied to web services
REST and
RESTful API
• Client-Server – determined by environment
• Stateless – data needed for authentication included in every request
headers (e.g. Cookies)
• Cacheable – HTTP cache control headers
• Layered system – reverse proxy server could be used
REST Architectural Constraints
applied to web services
REST and
RESTful API
• Client-Server – determined by environment
• Stateless – data needed for authentication included in every request
headers (e.g. Cookies)
• Cacheable – HTTP cache control headers
• Layered system – reverse proxy server could be used
• Uniform interface
REST Architectural Constraints
applied to web services
REST and
RESTful API
• Client-Server – determined by environment
• Stateless – data needed for authentication included in every request
headers (e.g. Cookies)
• Cacheable – HTTP cache control headers
• Layered system – reverse proxy server could be used
• Uniform interface
REST Architectural Constraints
applied to web services
- Identification of resources – URI
REST and
RESTful API
• Client-Server – determined by environment
• Stateless – data needed for authentication included in every request
headers (e.g. Cookies)
• Cacheable – HTTP cache control headers
• Layered system – reverse proxy server could be used
• Uniform interface
REST Architectural Constraints
applied to web services
- Identification of resources – URI
- Self-descriptive messages – HTTP headers: cache
control headers, “Content-Type” header, “Accept” header
REST and
RESTful API
• Client-Server – determined by environment
• Stateless – data needed for authentication included in every request
headers (e.g. Cookies)
• Cacheable – HTTP cache control headers
• Layered system – reverse proxy server could be used
• Uniform interface
REST Architectural Constraints
applied to web services
- Identification of resources – URI
- Self-descriptive messages – HTTP headers: cache
control headers, “Content-Type” header, “Accept” header
- Standard HTTP methods: POST, GET, PUT, DELETE and HTTP
Response codes
REST and
RESTful API
• Client-Server – determined by environment
• Stateless – data needed for authentication included in every request
headers (e.g. Cookies)
• Cacheable – HTTP cache control headers
• Layered system – reverse proxy server could be used
• Uniform interface
REST Architectural Constraints
applied to web services
- Identification of resources – URI
- Self-descriptive messages – HTTP headers: cache
control headers, “Content-Type” header, “Accept” header
- Standard HTTP methods: POST, GET, PUT, DELETE and HTTP
Response codes
- Resource entities can be filtered by referencing resources
properties values in URI REST and
RESTful API
This is not RESTful
POST /createAccount
Request:
Cookie: ...
{name: Petro, email: president@gov.ua}
Response:
{name: Petro, email: president@gov.ua}
GET /getAllAccounts?name=Petro
Request:
Cookie: ...
Response:
[{name: Petro, email: president@gov.ua},
{name: admin, email: admin@gov.ua}]
GET /findAccounts?name=Petro
Request:
Cookie: ...
Response:
[{name: Petro, email: president@gov.ua}]
GET /getAccount?id=1
Request:
Cookie: ...
Response:
{name: Petro, email: president@gov.ua}
POST /updateAccount
Request:
Cookie: ...
{id: 1, name: PetroP, email: president@gov.ua}
Response:
{name: PetroP, email: president@gov.ua}
POST /deleteAccount
Request:
Cookie: ...
{id: 1}
Response codes
Success: 200 OK
Fail: 200 OK {error: …}
This is RESTful!
POST /accounts
Request:
Cookie: ...
Content-Type: application/json
Accept: application/json
{name: Petro, email: president@gov.ua}
Response:
Cache-Control : private, max-age=0, no-cache
Content-Type: application/json
{name: Petro, email: president@gov.ua}
GET /accounts/1
Request:
Cookie: ...
Accept: application/json
Response:
Cache-Control : private, max-age=0, no-cache
Content-Type: application/json
{name: Petro, email: president@gov.ua}
GET /accounts
Request:
Cookie: ...
Accept: application/json
Response:
Cache-Control : private, max-age=0, no-cache
Content-Type: application/json
[{name: Petro, email: president@gov.ua},
{name: admin, email: admin@gov.ua}]
GET /accounts?name=Petro
Request:
Cookie: ...
Accept: application/json
Response:
Cache-Control : private, max-age=0, no-cache
Content-Type: application/json
[{name: Petro, email: president@gov.ua}]
PUT /accounts/1
Request:
Cookie: ...
Accept: application/json
{name: PetroP, email: president@gov.ua}
Response:
Cache-Control : private, max-age=0, no-cache
Content-Type: application/json
{name: PetroP, email: president@gov.ua}
DELETE /accounts/1
Request:
Cookie: ...
Content-Type: application/json
Accept: application/json
Response codes
Success: 200 OK, 201 Created
Fail: 400 Bad Request, 404 Not Found, 403
Forbidden, 500 Internal Server Error
Calculated data in REST
Int sum (a, b)
{ return a + b; }
• GET /sum – collection of all integers' sums: [0, 1, 2, 3, ..., N, ...]
• GET /sum/N – collection of all sums of 2 and all integers: [2, 3, 4, ..., N, ...]
• GET/sum/N/M–N+M
• POST /account/1/leaderboard/2 {score: 50}
• GET /account/1/leaderboard/2 {score: 100}
• GET /leaderboard/2 [ { account_id: 1, score: 100, position: 2 },
{ account_id: 2, score: 200, position: 1 }
Game Leaderboard [
{ account_id: 1, score: 50, game_id: 2 },
{ account_id: 1, score: 100, game_id: 2 },
{ account_id: 2, score: 150, game_id: 2 },
{ account_id: 2, score: 200, game_id: 2 }]
RESTful: Pros and Cons
PROS
• Simply
• Consistent
• Easy to debug
• Scalable
RESTful: Pros and Cons
PROS CONS
• Simply
• Consistent
• Easy to debug
• Scalable
• Strange
• Lack of support
• Stateless
• Not a protocol
What we got from REST
• Direct mapping of resources to DB entities (SQL tables, NoSQL documents
collections): POST /accounts => INSERT INTO accounts
What we got from REST
• Direct mapping of resources to DB entities (SQL tables, NoSQL documents
collections): POST /accounts => INSERT INTO accounts
• Same access policies for different authentication flows (Cookies authorization,
HTTP basic authorization)
What we got from REST
• Direct mapping of resources to DB entities (SQL tables, NoSQL documents
collections): POST /accounts => INSERT INTO accounts
• Same access policies for different authentication flows (Cookies authorization,
HTTP basic authorization)
• URI aliases (/accounts/1 => / me, /account/1/gamedata =>/my/gamedata)
What we got from REST
• Direct mapping of resources to DB entities (SQL tables, NoSQL documents
collections): POST /accounts => INSERT INTO accounts
• Same access policies for different authentication flows (Cookies authorization,
HTTP basic authorization)
• URI aliases (/accounts/1 => / me, /account/1/gamedata =>/my/gamedata)
• Common design guidelines
What we got from REST
• Direct mapping of resources to DB entities (SQL tables, NoSQL documents
collections): POST /accounts => INSERT INTO accounts
• Same access policies for different authentication flows (Cookies authorization,
HTTP basic authorization)
• URI aliases (/accounts/1 => / me, /account/1/gamedata => / my/gamedata)
• Common design guidelines
• Same back-end for external and internal
services
What we got from REST
• Direct mapping of resources to DB entities (SQL tables, NoSQL documents
collections): POST /accounts => INSERT INTO accounts
• Same access policies for different authentication flows (Cookies authorization,
HTTP basic authorization)
• URI aliases (/accounts/1 => / me, /account/1/gamedata => / my/gamedata)
• Common design guidelines
• Same back-end for external and internal
services
• Common test flow
REST API Testing
Test Unit = HTTP Verb + URI + Request headers + [Request Body]
HTTP Verb
URL
Request headers + [Request Body]
Test steps
1. Start the Application
2. Prepare test data in storage if needed
3. Perform HTTP API query
4. Check response headers and body
5. Check affected piece of data retrieved from storage directly or even through the REST API
Storage API could be stubbed and spied, in this case storage API calls should be checked
on step 5.
Our API Building Codex
1. Everything is a collection
Our API Building Codex
1. Everything is a collection
2. Every collection has CRUD (POST, GET, PUT, DELETE)
Our API Building Codex
1. Everything is a collection
2. Every collection has CRUD (POST, GET, PUT, DELETE)
3. Use HTTP response codes
Our API Building Codex
1. Everything is a collection
2. Every collection has CRUD (POST, GET, PUT, DELETE)
3. Use HTTP response codes
4. Filter and pagination through URI params
Our API Building Codex
1. Everything is a collection
2. Every collection has CRUD (POST, GET, PUT, DELETE)
3. Use HTTP response codes
4. Filter and pagination through URI params
5. API version in URI
Our API Building Codex
1. Everything is a collection
2. Every collection has CRUD (POST, GET, PUT, DELETE)
3. Use HTTP response codes
4. Filter and pagination through URI params
5. API version in URI
6. Communicate with developers
Our API Building Codex
1. Everything is a collection
2. Every collection has CRUD (POST, GET, PUT, DELETE)
3. Use HTTP response codes
4. Filter and pagination through URI params
5. API version in URI
6. Communicate with developers
7. Documentation in code and tests
Our API Building Codex
1. Everything is a collection
2. Every collection has CRUD (POST, GET, PUT, DELETE)
3. Use HTTP response codes
4. Filter and pagination through URI params
5. API version in URI
6. Communicate with developers
7. Documentation in code and tests
8. No exceptions
Our API Building Codex
1. Everything is a collection
2. Every collection has CRUD (POST, GET, PUT, DELETE)
3. Use HTTP response codes
4. Filter and pagination through URI params
5. API version in URI
6. Communicate with developers
7. Documentation in code and tests
8. No exceptions
9. No exceptions for “No exceptions”
How games are published
Traditional Way Our Way
• Sign contract
• Satisfy publisher requirements
• Deploy game somewhere and provide
link to publisher or send game archive
directly
• Receive profit according to contract
• Register, fill billing info
• Fill game description fields, upload
game archive through API
• Game appears in available games
list for clients
• Start earning from ads and transactions
Our publishing way vs traditional way
Increased time between complete game and
actual publishing
Almost immediate game publishing
You need to implement and maintain back-end
for your games
Back-end services included
You need to implement monetization (ads or
transactions)
Ads are served by our service, payment system
could be integrated with API. You receive profit
share.
Payment reports are often poor Full reports from ad providers and payment
systems
You need to maintain your own deploy cycle We have sandbox mode where you can view
your game before actual publishing.
Deployment API can be
Traditional Way Our Way
Embedding to third-party WEB
resources
• IFrame
• Construct application on the fly on page with JS
• Subdomain with third-party wrapper
Embedding: IFrame
PROS
• Easy and obvious
• No cross-domain
requests
• Client can control own
page view
• Client can control own
page view
• No conflicts with client's
JS and CSS
Embedding: IFrame
PROS CONS
• Easy and obvious
• No cross-domain
requests
• Client can control own
page view
• Client can control own
page view
• No conflicts with client's
JS and CSS
• Client should be explicitly
identified in each AJAX
request
• Client can't customize
our application view
• Third-party cookies
browser policies
• No direct links to our
application's subpages
• Increased page
construction time
Embedding: Subdomain
PROS
• No third-party cookies
• Client identified by domain
• No cross-domain requests
• Direct links to our application
subpages
• Less page construction time
• No conflicts with client's JS
and CSS
Embedding: Subdomain
PROS CONS
• No third-party cookies
• Client identified by domain
• No cross-domain requests
• Direct links to our application
subpages
• Less page construction time
• No conflicts with client's JS
and CSS
• Server configuration on the
side of Client
• Client can't customize
application view by own
CSS or JS
• Client can't customize own
views in wrapper
Embedding: Construct on the fly with JS
PROS
• No third-party cookies
• Client identified by domain
• No cross-domain requests
• Client can customize our
application view
• Client can control own page
• Direct links to our application
subpages
Embedding: Construct on the fly with JS
PROS CONS
• No third-party cookies
• Client identified by domain
• No cross-domain requests
• Client can customize our
application view
• Client can control own page
• Direct links to our application
subpages
• Increased page construction
time
• Restricting customization
of our application by Client's
CSS
• Isolating our application from
client's JS
Construct on the fly solutions
• Increased page construction time – pre-
rendered HTML
• Restricting customization of our application's
CSS – random dynamic prefix for CSS
CSS
client.css.tpl:
.{{placeholder}}_class {
color: red;
}
GET /client.css
.SOME_RANDOM_VALUE_class {
color: red;
}
JS
app.js.tpl:
function App (cssPrefix) {
var container = document.createElement('div');
container.className = cssPrefix + '_class';
}
new App({{placeholder}});
GET app.js
…
new App(‘SOME_RANDOM_VALUE’);
• Isolating our application from client's JS – wrap all
code in closure, do not touch existing objects
(internal browser objects, DOM objects etc.)
(function () {
//all application code here
})();
var container = document.createElement('div');
container.remove = function () {…}; //wrong
function remove (element) {…} //right
Our technologies and tools
• Back-end
• Front-end
- Node.js (Sails.js, pm2, Grunt)
- PostgreSQL
- HTML 5, CSS3
- Require.js
- Google Closure Compiler + Almond.js for production build
Leonid Kuzmin
lndkuzmin@gmail.com
Thank you!

Weitere ähnliche Inhalte

Was ist angesagt?

Moving Graphs to Production At Scale
Moving Graphs to Production At ScaleMoving Graphs to Production At Scale
Moving Graphs to Production At ScaleNeo4j
 
Solr for Indexing and Searching Logs
Solr for Indexing and Searching LogsSolr for Indexing and Searching Logs
Solr for Indexing and Searching LogsSematext Group, Inc.
 
Html cors- lior rotkovitch
Html cors- lior rotkovitchHtml cors- lior rotkovitch
Html cors- lior rotkovitchLior Rotkovitch
 
Web server installation_configuration_apache
Web server installation_configuration_apacheWeb server installation_configuration_apache
Web server installation_configuration_apacheShaojie Yang
 
Apache course contents
Apache course contentsApache course contents
Apache course contentsdarshangosh
 
Web api scalability and performance
Web api scalability and performanceWeb api scalability and performance
Web api scalability and performanceHimanshu Desai
 
aclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHoundaclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHoundDirkjanMollema
 
Practical Kerberos with Apache HBase
Practical Kerberos with Apache HBasePractical Kerberos with Apache HBase
Practical Kerberos with Apache HBaseJosh Elser
 
DNS for Developers - ConFoo Montreal
DNS for Developers - ConFoo MontrealDNS for Developers - ConFoo Montreal
DNS for Developers - ConFoo MontrealMaarten Balliauw
 
Play + scala + reactive mongo
Play + scala + reactive mongoPlay + scala + reactive mongo
Play + scala + reactive mongoMax Kremer
 
Best Practice in API Design
Best Practice in API DesignBest Practice in API Design
Best Practice in API DesignLorna Mitchell
 
Data Analytics Service Company and Its Ruby Usage
Data Analytics Service Company and Its Ruby UsageData Analytics Service Company and Its Ruby Usage
Data Analytics Service Company and Its Ruby UsageSATOSHI TAGOMORI
 
MongoDB.local Sydney: MongoDB Atlas for Your Enterprise
MongoDB.local Sydney: MongoDB Atlas for Your EnterpriseMongoDB.local Sydney: MongoDB Atlas for Your Enterprise
MongoDB.local Sydney: MongoDB Atlas for Your EnterpriseMongoDB
 
TriHUG 2/14: Apache Sentry
TriHUG 2/14: Apache SentryTriHUG 2/14: Apache Sentry
TriHUG 2/14: Apache Sentrytrihug
 
Webinar: Was ist neu in MongoDB 2.4
Webinar: Was ist neu in MongoDB 2.4Webinar: Was ist neu in MongoDB 2.4
Webinar: Was ist neu in MongoDB 2.4MongoDB
 
Get more than a cache back! - ConFoo Montreal
Get more than a cache back! - ConFoo MontrealGet more than a cache back! - ConFoo Montreal
Get more than a cache back! - ConFoo MontrealMaarten Balliauw
 
Apache Tutorial
Apache TutorialApache Tutorial
Apache TutorialGuru99
 

Was ist angesagt? (20)

Moving Graphs to Production At Scale
Moving Graphs to Production At ScaleMoving Graphs to Production At Scale
Moving Graphs to Production At Scale
 
Solr for Indexing and Searching Logs
Solr for Indexing and Searching LogsSolr for Indexing and Searching Logs
Solr for Indexing and Searching Logs
 
Html cors- lior rotkovitch
Html cors- lior rotkovitchHtml cors- lior rotkovitch
Html cors- lior rotkovitch
 
Web server installation_configuration_apache
Web server installation_configuration_apacheWeb server installation_configuration_apache
Web server installation_configuration_apache
 
Apache course contents
Apache course contentsApache course contents
Apache course contents
 
Web api scalability and performance
Web api scalability and performanceWeb api scalability and performance
Web api scalability and performance
 
aclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHoundaclpwn - Active Directory ACL exploitation with BloodHound
aclpwn - Active Directory ACL exploitation with BloodHound
 
Apache Web Server Setup 2
Apache Web Server Setup 2Apache Web Server Setup 2
Apache Web Server Setup 2
 
Practical Kerberos with Apache HBase
Practical Kerberos with Apache HBasePractical Kerberos with Apache HBase
Practical Kerberos with Apache HBase
 
slides (PPT)
slides (PPT)slides (PPT)
slides (PPT)
 
Http
HttpHttp
Http
 
DNS for Developers - ConFoo Montreal
DNS for Developers - ConFoo MontrealDNS for Developers - ConFoo Montreal
DNS for Developers - ConFoo Montreal
 
Play + scala + reactive mongo
Play + scala + reactive mongoPlay + scala + reactive mongo
Play + scala + reactive mongo
 
Best Practice in API Design
Best Practice in API DesignBest Practice in API Design
Best Practice in API Design
 
Data Analytics Service Company and Its Ruby Usage
Data Analytics Service Company and Its Ruby UsageData Analytics Service Company and Its Ruby Usage
Data Analytics Service Company and Its Ruby Usage
 
MongoDB.local Sydney: MongoDB Atlas for Your Enterprise
MongoDB.local Sydney: MongoDB Atlas for Your EnterpriseMongoDB.local Sydney: MongoDB Atlas for Your Enterprise
MongoDB.local Sydney: MongoDB Atlas for Your Enterprise
 
TriHUG 2/14: Apache Sentry
TriHUG 2/14: Apache SentryTriHUG 2/14: Apache Sentry
TriHUG 2/14: Apache Sentry
 
Webinar: Was ist neu in MongoDB 2.4
Webinar: Was ist neu in MongoDB 2.4Webinar: Was ist neu in MongoDB 2.4
Webinar: Was ist neu in MongoDB 2.4
 
Get more than a cache back! - ConFoo Montreal
Get more than a cache back! - ConFoo MontrealGet more than a cache back! - ConFoo Montreal
Get more than a cache back! - ConFoo Montreal
 
Apache Tutorial
Apache TutorialApache Tutorial
Apache Tutorial
 

Andere mochten auch

Андрій Рогаля “Проблеми розробки інді гри власними силами”
Андрій Рогаля “Проблеми розробки інді гри власними силами”Андрій Рогаля “Проблеми розробки інді гри власними силами”
Андрій Рогаля “Проблеми розробки інді гри власними силами”Lviv Startup Club
 
Василь Хмаренко: "3 напрямки просування в instagram"
Василь Хмаренко: "3 напрямки просування в instagram"Василь Хмаренко: "3 напрямки просування в instagram"
Василь Хмаренко: "3 напрямки просування в instagram"Lviv Startup Club
 
Антон Безкоровайний “Аналітика та дослідження соціальних медіа для розвитку в...
Антон Безкоровайний “Аналітика та дослідження соціальних медіа для розвитку в...Антон Безкоровайний “Аналітика та дослідження соціальних медіа для розвитку в...
Антон Безкоровайний “Аналітика та дослідження соціальних медіа для розвитку в...Lviv Startup Club
 
Lviv PMDay 2015 S Сергій Поволяшко: “Розумне ініціювання проекту”
Lviv PMDay 2015 S Сергій Поволяшко: “Розумне ініціювання проекту”Lviv PMDay 2015 S Сергій Поволяшко: “Розумне ініціювання проекту”
Lviv PMDay 2015 S Сергій Поволяшко: “Розумне ініціювання проекту”Lviv Startup Club
 
Михайло Щербачов та Олексій Андрусенко: “Як аутсорсингової компанії зробити 7...
Михайло Щербачов та Олексій Андрусенко: “Як аутсорсингової компанії зробити 7...Михайло Щербачов та Олексій Андрусенко: “Як аутсорсингової компанії зробити 7...
Михайло Щербачов та Олексій Андрусенко: “Як аутсорсингової компанії зробити 7...Lviv Startup Club
 
Анна Мельничук "Три кейси про щирість. Як людяні тексти повернули підписника...
Анна Мельничук  "Три кейси про щирість. Як людяні тексти повернули підписника...Анна Мельничук  "Три кейси про щирість. Як людяні тексти повернули підписника...
Анна Мельничук "Три кейси про щирість. Як людяні тексти повернули підписника...Lviv Startup Club
 
Олександр Хистев “Open Source в eCommerce. Як обрати?”
Олександр Хистев “Open Source в eCommerce. Як обрати?”Олександр Хистев “Open Source в eCommerce. Як обрати?”
Олександр Хистев “Open Source в eCommerce. Як обрати?”Lviv Startup Club
 
"Де взяти рецепт соусу компанії?" Сергій Фіцак
"Де взяти рецепт соусу компанії?" Сергій Фіцак"Де взяти рецепт соусу компанії?" Сергій Фіцак
"Де взяти рецепт соусу компанії?" Сергій ФіцакLviv Startup Club
 
Lviv PMDay 2015 S Валерій Шипунов: “Роль менеджера у self-organized team”
Lviv PMDay 2015 S Валерій Шипунов: “Роль менеджера у self-organized team”Lviv PMDay 2015 S Валерій Шипунов: “Роль менеджера у self-organized team”
Lviv PMDay 2015 S Валерій Шипунов: “Роль менеджера у self-organized team”Lviv Startup Club
 
Таня Євдокименко “Як рости разом зі стартапом та не померти”
Таня Євдокименко “Як рости разом зі стартапом та не померти”Таня Євдокименко “Як рости разом зі стартапом та не померти”
Таня Євдокименко “Як рости разом зі стартапом та не померти”Lviv Startup Club
 
Віктор Гайдін: “Marketing by Nerds: how R&D actually works”
Віктор Гайдін: “Marketing by Nerds: how R&D actually works”Віктор Гайдін: “Marketing by Nerds: how R&D actually works”
Віктор Гайдін: “Marketing by Nerds: how R&D actually works”Lviv Startup Club
 
Микола Урсатій “Dragon’s Games – ігри чи “порнофільми”?”
Микола Урсатій “Dragon’s Games – ігри чи “порнофільми”?”Микола Урсатій “Dragon’s Games – ігри чи “порнофільми”?”
Микола Урсатій “Dragon’s Games – ігри чи “порнофільми”?”Lviv Startup Club
 
Lviv PMDay 2015 S Дмитро Єфіменко “Quality of the product team”
Lviv PMDay 2015 S Дмитро Єфіменко “Quality of the product team”Lviv PMDay 2015 S Дмитро Єфіменко “Quality of the product team”
Lviv PMDay 2015 S Дмитро Єфіменко “Quality of the product team”Lviv Startup Club
 
Гліб Криштов:“Автоматизація бізнес процесів”
Гліб Криштов:“Автоматизація бізнес процесів”Гліб Криштов:“Автоматизація бізнес процесів”
Гліб Криштов:“Автоматизація бізнес процесів”Lviv Startup Club
 
Олена Лобова “Make Games, Not War”
Олена Лобова “Make Games, Not War”Олена Лобова “Make Games, Not War”
Олена Лобова “Make Games, Not War”Lviv Startup Club
 
Lviv PMDay 2015 S Сергій Лавриненко: “Що таке бутсреппінгова ІТ компанія і як...
Lviv PMDay 2015 S Сергій Лавриненко: “Що таке бутсреппінгова ІТ компанія і як...Lviv PMDay 2015 S Сергій Лавриненко: “Що таке бутсреппінгова ІТ компанія і як...
Lviv PMDay 2015 S Сергій Лавриненко: “Що таке бутсреппінгова ІТ компанія і як...Lviv Startup Club
 
Андрій Ждань “Як здобувати знання, які рухають нас вперед. І що з ними потім ...
Андрій Ждань “Як здобувати знання, які рухають нас вперед. І що з ними потім ...Андрій Ждань “Як здобувати знання, які рухають нас вперед. І що з ними потім ...
Андрій Ждань “Як здобувати знання, які рухають нас вперед. І що з ними потім ...Lviv Startup Club
 
Ігор Антонов “Короткий курс теорії ймовірності для ігрових дизайнерів.”
Ігор Антонов “Короткий курс теорії ймовірності для ігрових дизайнерів.”Ігор Антонов “Короткий курс теорії ймовірності для ігрових дизайнерів.”
Ігор Антонов “Короткий курс теорії ймовірності для ігрових дизайнерів.”Lviv Startup Club
 
Марія Науменко: WIFI – незабутня реклама!
Марія Науменко: WIFI – незабутня реклама!Марія Науменко: WIFI – незабутня реклама!
Марія Науменко: WIFI – незабутня реклама!Lviv Startup Club
 

Andere mochten auch (20)

Андрій Рогаля “Проблеми розробки інді гри власними силами”
Андрій Рогаля “Проблеми розробки інді гри власними силами”Андрій Рогаля “Проблеми розробки інді гри власними силами”
Андрій Рогаля “Проблеми розробки інді гри власними силами”
 
Василь Хмаренко: "3 напрямки просування в instagram"
Василь Хмаренко: "3 напрямки просування в instagram"Василь Хмаренко: "3 напрямки просування в instagram"
Василь Хмаренко: "3 напрямки просування в instagram"
 
Антон Безкоровайний “Аналітика та дослідження соціальних медіа для розвитку в...
Антон Безкоровайний “Аналітика та дослідження соціальних медіа для розвитку в...Антон Безкоровайний “Аналітика та дослідження соціальних медіа для розвитку в...
Антон Безкоровайний “Аналітика та дослідження соціальних медіа для розвитку в...
 
Lviv PMDay 2015 S Сергій Поволяшко: “Розумне ініціювання проекту”
Lviv PMDay 2015 S Сергій Поволяшко: “Розумне ініціювання проекту”Lviv PMDay 2015 S Сергій Поволяшко: “Розумне ініціювання проекту”
Lviv PMDay 2015 S Сергій Поволяшко: “Розумне ініціювання проекту”
 
Михайло Щербачов та Олексій Андрусенко: “Як аутсорсингової компанії зробити 7...
Михайло Щербачов та Олексій Андрусенко: “Як аутсорсингової компанії зробити 7...Михайло Щербачов та Олексій Андрусенко: “Як аутсорсингової компанії зробити 7...
Михайло Щербачов та Олексій Андрусенко: “Як аутсорсингової компанії зробити 7...
 
Анна Мельничук "Три кейси про щирість. Як людяні тексти повернули підписника...
Анна Мельничук  "Три кейси про щирість. Як людяні тексти повернули підписника...Анна Мельничук  "Три кейси про щирість. Як людяні тексти повернули підписника...
Анна Мельничук "Три кейси про щирість. Як людяні тексти повернули підписника...
 
Олександр Хистев “Open Source в eCommerce. Як обрати?”
Олександр Хистев “Open Source в eCommerce. Як обрати?”Олександр Хистев “Open Source в eCommerce. Як обрати?”
Олександр Хистев “Open Source в eCommerce. Як обрати?”
 
"Де взяти рецепт соусу компанії?" Сергій Фіцак
"Де взяти рецепт соусу компанії?" Сергій Фіцак"Де взяти рецепт соусу компанії?" Сергій Фіцак
"Де взяти рецепт соусу компанії?" Сергій Фіцак
 
Lviv PMDay 2015 S Валерій Шипунов: “Роль менеджера у self-organized team”
Lviv PMDay 2015 S Валерій Шипунов: “Роль менеджера у self-organized team”Lviv PMDay 2015 S Валерій Шипунов: “Роль менеджера у self-organized team”
Lviv PMDay 2015 S Валерій Шипунов: “Роль менеджера у self-organized team”
 
Таня Євдокименко “Як рости разом зі стартапом та не померти”
Таня Євдокименко “Як рости разом зі стартапом та не померти”Таня Євдокименко “Як рости разом зі стартапом та не померти”
Таня Євдокименко “Як рости разом зі стартапом та не померти”
 
Віктор Гайдін: “Marketing by Nerds: how R&D actually works”
Віктор Гайдін: “Marketing by Nerds: how R&D actually works”Віктор Гайдін: “Marketing by Nerds: how R&D actually works”
Віктор Гайдін: “Marketing by Nerds: how R&D actually works”
 
Микола Урсатій “Dragon’s Games – ігри чи “порнофільми”?”
Микола Урсатій “Dragon’s Games – ігри чи “порнофільми”?”Микола Урсатій “Dragon’s Games – ігри чи “порнофільми”?”
Микола Урсатій “Dragon’s Games – ігри чи “порнофільми”?”
 
Ivan Dmytrasevych
 Ivan Dmytrasevych Ivan Dmytrasevych
Ivan Dmytrasevych
 
Lviv PMDay 2015 S Дмитро Єфіменко “Quality of the product team”
Lviv PMDay 2015 S Дмитро Єфіменко “Quality of the product team”Lviv PMDay 2015 S Дмитро Єфіменко “Quality of the product team”
Lviv PMDay 2015 S Дмитро Єфіменко “Quality of the product team”
 
Гліб Криштов:“Автоматизація бізнес процесів”
Гліб Криштов:“Автоматизація бізнес процесів”Гліб Криштов:“Автоматизація бізнес процесів”
Гліб Криштов:“Автоматизація бізнес процесів”
 
Олена Лобова “Make Games, Not War”
Олена Лобова “Make Games, Not War”Олена Лобова “Make Games, Not War”
Олена Лобова “Make Games, Not War”
 
Lviv PMDay 2015 S Сергій Лавриненко: “Що таке бутсреппінгова ІТ компанія і як...
Lviv PMDay 2015 S Сергій Лавриненко: “Що таке бутсреппінгова ІТ компанія і як...Lviv PMDay 2015 S Сергій Лавриненко: “Що таке бутсреппінгова ІТ компанія і як...
Lviv PMDay 2015 S Сергій Лавриненко: “Що таке бутсреппінгова ІТ компанія і як...
 
Андрій Ждань “Як здобувати знання, які рухають нас вперед. І що з ними потім ...
Андрій Ждань “Як здобувати знання, які рухають нас вперед. І що з ними потім ...Андрій Ждань “Як здобувати знання, які рухають нас вперед. І що з ними потім ...
Андрій Ждань “Як здобувати знання, які рухають нас вперед. І що з ними потім ...
 
Ігор Антонов “Короткий курс теорії ймовірності для ігрових дизайнерів.”
Ігор Антонов “Короткий курс теорії ймовірності для ігрових дизайнерів.”Ігор Антонов “Короткий курс теорії ймовірності для ігрових дизайнерів.”
Ігор Антонов “Короткий курс теорії ймовірності для ігрових дизайнерів.”
 
Марія Науменко: WIFI – незабутня реклама!
Марія Науменко: WIFI – незабутня реклама!Марія Науменко: WIFI – незабутня реклама!
Марія Науменко: WIFI – незабутня реклама!
 

Ähnlich wie Леонід Кузьмін “Сам собі паблішер. Від сайту ігрової студії до універсального back-end провайдера і сервісу публікації ігор.”

Resting on your laurels will get you powned
Resting on your laurels will get you pownedResting on your laurels will get you powned
Resting on your laurels will get you pownedDinis Cruz
 
ASP.NET Mvc 4 web api
ASP.NET Mvc 4 web apiASP.NET Mvc 4 web api
ASP.NET Mvc 4 web apiTiago Knoch
 
Rest WebAPI with OData
Rest WebAPI with ODataRest WebAPI with OData
Rest WebAPI with ODataMahek Merchant
 
REST API Recommendations
REST API RecommendationsREST API Recommendations
REST API RecommendationsJeelani Shaik
 
Rest api titouan benoit
Rest api   titouan benoitRest api   titouan benoit
Rest api titouan benoitTitouan BENOIT
 
Build and Manage Your APIs with Amazon API Gateway
Build and Manage Your APIs with Amazon API GatewayBuild and Manage Your APIs with Amazon API Gateway
Build and Manage Your APIs with Amazon API GatewayAmazon Web Services
 
Api design and development
Api design and developmentApi design and development
Api design and developmentoquidave
 
Externalizing Authorization in Micro Services world
Externalizing Authorization in Micro Services worldExternalizing Authorization in Micro Services world
Externalizing Authorization in Micro Services worldSitaraman Lakshminarayanan
 
RESTful SOA - 中科院暑期讲座
RESTful SOA - 中科院暑期讲座RESTful SOA - 中科院暑期讲座
RESTful SOA - 中科院暑期讲座Li Yi
 
Getting Started with Globus for Developers
Getting Started with Globus for DevelopersGetting Started with Globus for Developers
Getting Started with Globus for DevelopersGlobus
 
RESTful services
RESTful servicesRESTful services
RESTful servicesgouthamrv
 
Aws Technical Day 2015 - Amazon API Gateway
Aws Technical Day 2015 - Amazon API GatewayAws Technical Day 2015 - Amazon API Gateway
Aws Technical Day 2015 - Amazon API Gatewayaws-marketing-il
 
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.jsCarol McDonald
 
Best Practices for Architecting a Pragmatic Web API.
Best Practices for Architecting a Pragmatic Web API.Best Practices for Architecting a Pragmatic Web API.
Best Practices for Architecting a Pragmatic Web API.Mario Cardinal
 

Ähnlich wie Леонід Кузьмін “Сам собі паблішер. Від сайту ігрової студії до універсального back-end провайдера і сервісу публікації ігор.” (20)

Resting on your laurels will get you powned
Resting on your laurels will get you pownedResting on your laurels will get you powned
Resting on your laurels will get you powned
 
ASP.NET Mvc 4 web api
ASP.NET Mvc 4 web apiASP.NET Mvc 4 web api
ASP.NET Mvc 4 web api
 
Attacking REST API
Attacking REST APIAttacking REST API
Attacking REST API
 
Rest WebAPI with OData
Rest WebAPI with ODataRest WebAPI with OData
Rest WebAPI with OData
 
REST API Recommendations
REST API RecommendationsREST API Recommendations
REST API Recommendations
 
Rest api titouan benoit
Rest api   titouan benoitRest api   titouan benoit
Rest api titouan benoit
 
Build and Manage Your APIs with Amazon API Gateway
Build and Manage Your APIs with Amazon API GatewayBuild and Manage Your APIs with Amazon API Gateway
Build and Manage Your APIs with Amazon API Gateway
 
Api design and development
Api design and developmentApi design and development
Api design and development
 
REST APIs
REST APIsREST APIs
REST APIs
 
Doing REST Right
Doing REST RightDoing REST Right
Doing REST Right
 
Externalizing Authorization in Micro Services world
Externalizing Authorization in Micro Services worldExternalizing Authorization in Micro Services world
Externalizing Authorization in Micro Services world
 
RESTful SOA - 中科院暑期讲座
RESTful SOA - 中科院暑期讲座RESTful SOA - 中科院暑期讲座
RESTful SOA - 中科院暑期讲座
 
Getting Started with Globus for Developers
Getting Started with Globus for DevelopersGetting Started with Globus for Developers
Getting Started with Globus for Developers
 
RESTful services
RESTful servicesRESTful services
RESTful services
 
Aws Technical Day 2015 - Amazon API Gateway
Aws Technical Day 2015 - Amazon API GatewayAws Technical Day 2015 - Amazon API Gateway
Aws Technical Day 2015 - Amazon API Gateway
 
Amazon API Gateway
Amazon API GatewayAmazon API Gateway
Amazon API Gateway
 
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
 
Best Practices for Architecting a Pragmatic Web API.
Best Practices for Architecting a Pragmatic Web API.Best Practices for Architecting a Pragmatic Web API.
Best Practices for Architecting a Pragmatic Web API.
 
Sword Crig 2007 12 06
Sword Crig 2007 12 06Sword Crig 2007 12 06
Sword Crig 2007 12 06
 

Mehr von Lviv Startup Club

Artem Bykovets: 4 Вершники апокаліпсису робочих стосунків (+антидоти до них) ...
Artem Bykovets: 4 Вершники апокаліпсису робочих стосунків (+антидоти до них) ...Artem Bykovets: 4 Вершники апокаліпсису робочих стосунків (+антидоти до них) ...
Artem Bykovets: 4 Вершники апокаліпсису робочих стосунків (+антидоти до них) ...Lviv Startup Club
 
Dmytro Khudenko: Challenges of implementing task managers in the corporate an...
Dmytro Khudenko: Challenges of implementing task managers in the corporate an...Dmytro Khudenko: Challenges of implementing task managers in the corporate an...
Dmytro Khudenko: Challenges of implementing task managers in the corporate an...Lviv Startup Club
 
Sergii Melnichenko: Лідерство в Agile командах: ТОП-5 основних психологічних ...
Sergii Melnichenko: Лідерство в Agile командах: ТОП-5 основних психологічних ...Sergii Melnichenko: Лідерство в Agile командах: ТОП-5 основних психологічних ...
Sergii Melnichenko: Лідерство в Agile командах: ТОП-5 основних психологічних ...Lviv Startup Club
 
Mariia Rashkevych: Підвищення ефективності розроблення та реалізації освітніх...
Mariia Rashkevych: Підвищення ефективності розроблення та реалізації освітніх...Mariia Rashkevych: Підвищення ефективності розроблення та реалізації освітніх...
Mariia Rashkevych: Підвищення ефективності розроблення та реалізації освітніх...Lviv Startup Club
 
Mykhailo Hryhorash: What can be good in a "bad" project? (UA)
Mykhailo Hryhorash: What can be good in a "bad" project? (UA)Mykhailo Hryhorash: What can be good in a "bad" project? (UA)
Mykhailo Hryhorash: What can be good in a "bad" project? (UA)Lviv Startup Club
 
Oleksii Kyselov: Що заважає ПМу зростати? Розбір практичних кейсів (UA)
Oleksii Kyselov: Що заважає ПМу зростати? Розбір практичних кейсів (UA)Oleksii Kyselov: Що заважає ПМу зростати? Розбір практичних кейсів (UA)
Oleksii Kyselov: Що заважає ПМу зростати? Розбір практичних кейсів (UA)Lviv Startup Club
 
Yaroslav Osolikhin: «Неідеальний» проєктний менеджер: People Management під ч...
Yaroslav Osolikhin: «Неідеальний» проєктний менеджер: People Management під ч...Yaroslav Osolikhin: «Неідеальний» проєктний менеджер: People Management під ч...
Yaroslav Osolikhin: «Неідеальний» проєктний менеджер: People Management під ч...Lviv Startup Club
 
Mariya Yeremenko: Вплив Генеративного ШІ на сучасний світ та на особисту ефек...
Mariya Yeremenko: Вплив Генеративного ШІ на сучасний світ та на особисту ефек...Mariya Yeremenko: Вплив Генеративного ШІ на сучасний світ та на особисту ефек...
Mariya Yeremenko: Вплив Генеративного ШІ на сучасний світ та на особисту ефек...Lviv Startup Club
 
Petro Nikolaiev & Dmytro Kisov: ТОП-5 методів дослідження клієнтів для успіху...
Petro Nikolaiev & Dmytro Kisov: ТОП-5 методів дослідження клієнтів для успіху...Petro Nikolaiev & Dmytro Kisov: ТОП-5 методів дослідження клієнтів для успіху...
Petro Nikolaiev & Dmytro Kisov: ТОП-5 методів дослідження клієнтів для успіху...Lviv Startup Club
 
Maksym Stelmakh : Державні електронні послуги та сервіси: чому бізнесу варто ...
Maksym Stelmakh : Державні електронні послуги та сервіси: чому бізнесу варто ...Maksym Stelmakh : Державні електронні послуги та сервіси: чому бізнесу варто ...
Maksym Stelmakh : Державні електронні послуги та сервіси: чому бізнесу варто ...Lviv Startup Club
 
Alexander Marchenko: Проблеми росту продуктової екосистеми (UA)
Alexander Marchenko: Проблеми росту продуктової екосистеми (UA)Alexander Marchenko: Проблеми росту продуктової екосистеми (UA)
Alexander Marchenko: Проблеми росту продуктової екосистеми (UA)Lviv Startup Club
 
Oleksandr Grytsenko: Save your Job або прокачай скіли до Engineering Manageme...
Oleksandr Grytsenko: Save your Job або прокачай скіли до Engineering Manageme...Oleksandr Grytsenko: Save your Job або прокачай скіли до Engineering Manageme...
Oleksandr Grytsenko: Save your Job або прокачай скіли до Engineering Manageme...Lviv Startup Club
 
Yuliia Pieskova: Фідбек: не лише "як", але й "коли" і "навіщо" (UA)
Yuliia Pieskova: Фідбек: не лише "як", але й "коли" і "навіщо" (UA)Yuliia Pieskova: Фідбек: не лише "як", але й "коли" і "навіщо" (UA)
Yuliia Pieskova: Фідбек: не лише "як", але й "коли" і "навіщо" (UA)Lviv Startup Club
 
Nataliya Kryvonis: Essential soft skills to lead your team (UA)
Nataliya Kryvonis: Essential soft skills to lead your team (UA)Nataliya Kryvonis: Essential soft skills to lead your team (UA)
Nataliya Kryvonis: Essential soft skills to lead your team (UA)Lviv Startup Club
 
Volodymyr Salyha: Stakeholder Alchemy: Transforming Analysis into Meaningful ...
Volodymyr Salyha: Stakeholder Alchemy: Transforming Analysis into Meaningful ...Volodymyr Salyha: Stakeholder Alchemy: Transforming Analysis into Meaningful ...
Volodymyr Salyha: Stakeholder Alchemy: Transforming Analysis into Meaningful ...Lviv Startup Club
 
Anna Chalyuk: 7 інструментів та принципів, які допоможуть зробити вашу команд...
Anna Chalyuk: 7 інструментів та принципів, які допоможуть зробити вашу команд...Anna Chalyuk: 7 інструментів та принципів, які допоможуть зробити вашу команд...
Anna Chalyuk: 7 інструментів та принципів, які допоможуть зробити вашу команд...Lviv Startup Club
 
Oksana Smilka: Цінності, цілі та (де) мотивація (UA)
Oksana Smilka: Цінності, цілі та (де) мотивація (UA)Oksana Smilka: Цінності, цілі та (де) мотивація (UA)
Oksana Smilka: Цінності, цілі та (де) мотивація (UA)Lviv Startup Club
 
Yaroslav Rozhankivskyy: Три складові і три передумови максимальної продуктивн...
Yaroslav Rozhankivskyy: Три складові і три передумови максимальної продуктивн...Yaroslav Rozhankivskyy: Три складові і три передумови максимальної продуктивн...
Yaroslav Rozhankivskyy: Три складові і три передумови максимальної продуктивн...Lviv Startup Club
 
Andrii Skoromnyi: Чому не працює методика "5 Чому?" – і яка є альтернатива? (UA)
Andrii Skoromnyi: Чому не працює методика "5 Чому?" – і яка є альтернатива? (UA)Andrii Skoromnyi: Чому не працює методика "5 Чому?" – і яка є альтернатива? (UA)
Andrii Skoromnyi: Чому не працює методика "5 Чому?" – і яка є альтернатива? (UA)Lviv Startup Club
 
Maryna Sokyrko & Oleksandr Chugui: Building Product Passion: Developing AI ch...
Maryna Sokyrko & Oleksandr Chugui: Building Product Passion: Developing AI ch...Maryna Sokyrko & Oleksandr Chugui: Building Product Passion: Developing AI ch...
Maryna Sokyrko & Oleksandr Chugui: Building Product Passion: Developing AI ch...Lviv Startup Club
 

Mehr von Lviv Startup Club (20)

Artem Bykovets: 4 Вершники апокаліпсису робочих стосунків (+антидоти до них) ...
Artem Bykovets: 4 Вершники апокаліпсису робочих стосунків (+антидоти до них) ...Artem Bykovets: 4 Вершники апокаліпсису робочих стосунків (+антидоти до них) ...
Artem Bykovets: 4 Вершники апокаліпсису робочих стосунків (+антидоти до них) ...
 
Dmytro Khudenko: Challenges of implementing task managers in the corporate an...
Dmytro Khudenko: Challenges of implementing task managers in the corporate an...Dmytro Khudenko: Challenges of implementing task managers in the corporate an...
Dmytro Khudenko: Challenges of implementing task managers in the corporate an...
 
Sergii Melnichenko: Лідерство в Agile командах: ТОП-5 основних психологічних ...
Sergii Melnichenko: Лідерство в Agile командах: ТОП-5 основних психологічних ...Sergii Melnichenko: Лідерство в Agile командах: ТОП-5 основних психологічних ...
Sergii Melnichenko: Лідерство в Agile командах: ТОП-5 основних психологічних ...
 
Mariia Rashkevych: Підвищення ефективності розроблення та реалізації освітніх...
Mariia Rashkevych: Підвищення ефективності розроблення та реалізації освітніх...Mariia Rashkevych: Підвищення ефективності розроблення та реалізації освітніх...
Mariia Rashkevych: Підвищення ефективності розроблення та реалізації освітніх...
 
Mykhailo Hryhorash: What can be good in a "bad" project? (UA)
Mykhailo Hryhorash: What can be good in a "bad" project? (UA)Mykhailo Hryhorash: What can be good in a "bad" project? (UA)
Mykhailo Hryhorash: What can be good in a "bad" project? (UA)
 
Oleksii Kyselov: Що заважає ПМу зростати? Розбір практичних кейсів (UA)
Oleksii Kyselov: Що заважає ПМу зростати? Розбір практичних кейсів (UA)Oleksii Kyselov: Що заважає ПМу зростати? Розбір практичних кейсів (UA)
Oleksii Kyselov: Що заважає ПМу зростати? Розбір практичних кейсів (UA)
 
Yaroslav Osolikhin: «Неідеальний» проєктний менеджер: People Management під ч...
Yaroslav Osolikhin: «Неідеальний» проєктний менеджер: People Management під ч...Yaroslav Osolikhin: «Неідеальний» проєктний менеджер: People Management під ч...
Yaroslav Osolikhin: «Неідеальний» проєктний менеджер: People Management під ч...
 
Mariya Yeremenko: Вплив Генеративного ШІ на сучасний світ та на особисту ефек...
Mariya Yeremenko: Вплив Генеративного ШІ на сучасний світ та на особисту ефек...Mariya Yeremenko: Вплив Генеративного ШІ на сучасний світ та на особисту ефек...
Mariya Yeremenko: Вплив Генеративного ШІ на сучасний світ та на особисту ефек...
 
Petro Nikolaiev & Dmytro Kisov: ТОП-5 методів дослідження клієнтів для успіху...
Petro Nikolaiev & Dmytro Kisov: ТОП-5 методів дослідження клієнтів для успіху...Petro Nikolaiev & Dmytro Kisov: ТОП-5 методів дослідження клієнтів для успіху...
Petro Nikolaiev & Dmytro Kisov: ТОП-5 методів дослідження клієнтів для успіху...
 
Maksym Stelmakh : Державні електронні послуги та сервіси: чому бізнесу варто ...
Maksym Stelmakh : Державні електронні послуги та сервіси: чому бізнесу варто ...Maksym Stelmakh : Державні електронні послуги та сервіси: чому бізнесу варто ...
Maksym Stelmakh : Державні електронні послуги та сервіси: чому бізнесу варто ...
 
Alexander Marchenko: Проблеми росту продуктової екосистеми (UA)
Alexander Marchenko: Проблеми росту продуктової екосистеми (UA)Alexander Marchenko: Проблеми росту продуктової екосистеми (UA)
Alexander Marchenko: Проблеми росту продуктової екосистеми (UA)
 
Oleksandr Grytsenko: Save your Job або прокачай скіли до Engineering Manageme...
Oleksandr Grytsenko: Save your Job або прокачай скіли до Engineering Manageme...Oleksandr Grytsenko: Save your Job або прокачай скіли до Engineering Manageme...
Oleksandr Grytsenko: Save your Job або прокачай скіли до Engineering Manageme...
 
Yuliia Pieskova: Фідбек: не лише "як", але й "коли" і "навіщо" (UA)
Yuliia Pieskova: Фідбек: не лише "як", але й "коли" і "навіщо" (UA)Yuliia Pieskova: Фідбек: не лише "як", але й "коли" і "навіщо" (UA)
Yuliia Pieskova: Фідбек: не лише "як", але й "коли" і "навіщо" (UA)
 
Nataliya Kryvonis: Essential soft skills to lead your team (UA)
Nataliya Kryvonis: Essential soft skills to lead your team (UA)Nataliya Kryvonis: Essential soft skills to lead your team (UA)
Nataliya Kryvonis: Essential soft skills to lead your team (UA)
 
Volodymyr Salyha: Stakeholder Alchemy: Transforming Analysis into Meaningful ...
Volodymyr Salyha: Stakeholder Alchemy: Transforming Analysis into Meaningful ...Volodymyr Salyha: Stakeholder Alchemy: Transforming Analysis into Meaningful ...
Volodymyr Salyha: Stakeholder Alchemy: Transforming Analysis into Meaningful ...
 
Anna Chalyuk: 7 інструментів та принципів, які допоможуть зробити вашу команд...
Anna Chalyuk: 7 інструментів та принципів, які допоможуть зробити вашу команд...Anna Chalyuk: 7 інструментів та принципів, які допоможуть зробити вашу команд...
Anna Chalyuk: 7 інструментів та принципів, які допоможуть зробити вашу команд...
 
Oksana Smilka: Цінності, цілі та (де) мотивація (UA)
Oksana Smilka: Цінності, цілі та (де) мотивація (UA)Oksana Smilka: Цінності, цілі та (де) мотивація (UA)
Oksana Smilka: Цінності, цілі та (де) мотивація (UA)
 
Yaroslav Rozhankivskyy: Три складові і три передумови максимальної продуктивн...
Yaroslav Rozhankivskyy: Три складові і три передумови максимальної продуктивн...Yaroslav Rozhankivskyy: Три складові і три передумови максимальної продуктивн...
Yaroslav Rozhankivskyy: Три складові і три передумови максимальної продуктивн...
 
Andrii Skoromnyi: Чому не працює методика "5 Чому?" – і яка є альтернатива? (UA)
Andrii Skoromnyi: Чому не працює методика "5 Чому?" – і яка є альтернатива? (UA)Andrii Skoromnyi: Чому не працює методика "5 Чому?" – і яка є альтернатива? (UA)
Andrii Skoromnyi: Чому не працює методика "5 Чому?" – і яка є альтернатива? (UA)
 
Maryna Sokyrko & Oleksandr Chugui: Building Product Passion: Developing AI ch...
Maryna Sokyrko & Oleksandr Chugui: Building Product Passion: Developing AI ch...Maryna Sokyrko & Oleksandr Chugui: Building Product Passion: Developing AI ch...
Maryna Sokyrko & Oleksandr Chugui: Building Product Passion: Developing AI ch...
 

Kürzlich hochgeladen

Cracking the Cultural Competence Code.pptx
Cracking the Cultural Competence Code.pptxCracking the Cultural Competence Code.pptx
Cracking the Cultural Competence Code.pptxWorkforce Group
 
Cheap Rate Call Girls In Noida Sector 62 Metro 959961乂3876
Cheap Rate Call Girls In Noida Sector 62 Metro 959961乂3876Cheap Rate Call Girls In Noida Sector 62 Metro 959961乂3876
Cheap Rate Call Girls In Noida Sector 62 Metro 959961乂3876dlhescort
 
Call Girls From Raj Nagar Extension Ghaziabad❤️8448577510 ⊹Best Escorts Servi...
Call Girls From Raj Nagar Extension Ghaziabad❤️8448577510 ⊹Best Escorts Servi...Call Girls From Raj Nagar Extension Ghaziabad❤️8448577510 ⊹Best Escorts Servi...
Call Girls From Raj Nagar Extension Ghaziabad❤️8448577510 ⊹Best Escorts Servi...lizamodels9
 
Call Girls Jp Nagar Just Call 👗 7737669865 👗 Top Class Call Girl Service Bang...
Call Girls Jp Nagar Just Call 👗 7737669865 👗 Top Class Call Girl Service Bang...Call Girls Jp Nagar Just Call 👗 7737669865 👗 Top Class Call Girl Service Bang...
Call Girls Jp Nagar Just Call 👗 7737669865 👗 Top Class Call Girl Service Bang...amitlee9823
 
Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...
Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...
Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...Sheetaleventcompany
 
Nelamangala Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Nelamangala Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Nelamangala Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Nelamangala Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...amitlee9823
 
Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...
Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...
Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...amitlee9823
 
Malegaon Call Girls Service ☎ ️82500–77686 ☎️ Enjoy 24/7 Escort Service
Malegaon Call Girls Service ☎ ️82500–77686 ☎️ Enjoy 24/7 Escort ServiceMalegaon Call Girls Service ☎ ️82500–77686 ☎️ Enjoy 24/7 Escort Service
Malegaon Call Girls Service ☎ ️82500–77686 ☎️ Enjoy 24/7 Escort ServiceDamini Dixit
 
Russian Call Girls In Rajiv Chowk Gurgaon ❤️8448577510 ⊹Best Escorts Service ...
Russian Call Girls In Rajiv Chowk Gurgaon ❤️8448577510 ⊹Best Escorts Service ...Russian Call Girls In Rajiv Chowk Gurgaon ❤️8448577510 ⊹Best Escorts Service ...
Russian Call Girls In Rajiv Chowk Gurgaon ❤️8448577510 ⊹Best Escorts Service ...lizamodels9
 
Lundin Gold - Q1 2024 Conference Call Presentation (Revised)
Lundin Gold - Q1 2024 Conference Call Presentation (Revised)Lundin Gold - Q1 2024 Conference Call Presentation (Revised)
Lundin Gold - Q1 2024 Conference Call Presentation (Revised)Adnet Communications
 
Eluru Call Girls Service ☎ ️93326-06886 ❤️‍🔥 Enjoy 24/7 Escort Service
Eluru Call Girls Service ☎ ️93326-06886 ❤️‍🔥 Enjoy 24/7 Escort ServiceEluru Call Girls Service ☎ ️93326-06886 ❤️‍🔥 Enjoy 24/7 Escort Service
Eluru Call Girls Service ☎ ️93326-06886 ❤️‍🔥 Enjoy 24/7 Escort ServiceDamini Dixit
 
Whitefield CALL GIRL IN 98274*61493 ❤CALL GIRLS IN ESCORT SERVICE❤CALL GIRL
Whitefield CALL GIRL IN 98274*61493 ❤CALL GIRLS IN ESCORT SERVICE❤CALL GIRLWhitefield CALL GIRL IN 98274*61493 ❤CALL GIRLS IN ESCORT SERVICE❤CALL GIRL
Whitefield CALL GIRL IN 98274*61493 ❤CALL GIRLS IN ESCORT SERVICE❤CALL GIRLkapoorjyoti4444
 
Falcon Invoice Discounting: Unlock Your Business Potential
Falcon Invoice Discounting: Unlock Your Business PotentialFalcon Invoice Discounting: Unlock Your Business Potential
Falcon Invoice Discounting: Unlock Your Business PotentialFalcon investment
 
Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...
Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...
Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...allensay1
 
Falcon's Invoice Discounting: Your Path to Prosperity
Falcon's Invoice Discounting: Your Path to ProsperityFalcon's Invoice Discounting: Your Path to Prosperity
Falcon's Invoice Discounting: Your Path to Prosperityhemanthkumar470700
 
Phases of Negotiation .pptx
 Phases of Negotiation .pptx Phases of Negotiation .pptx
Phases of Negotiation .pptxnandhinijagan9867
 
Falcon Invoice Discounting: The best investment platform in india for investors
Falcon Invoice Discounting: The best investment platform in india for investorsFalcon Invoice Discounting: The best investment platform in india for investors
Falcon Invoice Discounting: The best investment platform in india for investorsFalcon Invoice Discounting
 
Call Girls In Noida 959961⊹3876 Independent Escort Service Noida
Call Girls In Noida 959961⊹3876 Independent Escort Service NoidaCall Girls In Noida 959961⊹3876 Independent Escort Service Noida
Call Girls In Noida 959961⊹3876 Independent Escort Service Noidadlhescort
 
Value Proposition canvas- Customer needs and pains
Value Proposition canvas- Customer needs and painsValue Proposition canvas- Customer needs and pains
Value Proposition canvas- Customer needs and painsP&CO
 

Kürzlich hochgeladen (20)

Cracking the Cultural Competence Code.pptx
Cracking the Cultural Competence Code.pptxCracking the Cultural Competence Code.pptx
Cracking the Cultural Competence Code.pptx
 
Cheap Rate Call Girls In Noida Sector 62 Metro 959961乂3876
Cheap Rate Call Girls In Noida Sector 62 Metro 959961乂3876Cheap Rate Call Girls In Noida Sector 62 Metro 959961乂3876
Cheap Rate Call Girls In Noida Sector 62 Metro 959961乂3876
 
Call Girls From Raj Nagar Extension Ghaziabad❤️8448577510 ⊹Best Escorts Servi...
Call Girls From Raj Nagar Extension Ghaziabad❤️8448577510 ⊹Best Escorts Servi...Call Girls From Raj Nagar Extension Ghaziabad❤️8448577510 ⊹Best Escorts Servi...
Call Girls From Raj Nagar Extension Ghaziabad❤️8448577510 ⊹Best Escorts Servi...
 
Call Girls Jp Nagar Just Call 👗 7737669865 👗 Top Class Call Girl Service Bang...
Call Girls Jp Nagar Just Call 👗 7737669865 👗 Top Class Call Girl Service Bang...Call Girls Jp Nagar Just Call 👗 7737669865 👗 Top Class Call Girl Service Bang...
Call Girls Jp Nagar Just Call 👗 7737669865 👗 Top Class Call Girl Service Bang...
 
Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...
Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...
Chandigarh Escorts Service 📞8868886958📞 Just📲 Call Nihal Chandigarh Call Girl...
 
Nelamangala Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Nelamangala Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...Nelamangala Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
Nelamangala Call Girls: 🍓 7737669865 🍓 High Profile Model Escorts | Bangalore...
 
Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...
Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...
Call Girls Electronic City Just Call 👗 7737669865 👗 Top Class Call Girl Servi...
 
Malegaon Call Girls Service ☎ ️82500–77686 ☎️ Enjoy 24/7 Escort Service
Malegaon Call Girls Service ☎ ️82500–77686 ☎️ Enjoy 24/7 Escort ServiceMalegaon Call Girls Service ☎ ️82500–77686 ☎️ Enjoy 24/7 Escort Service
Malegaon Call Girls Service ☎ ️82500–77686 ☎️ Enjoy 24/7 Escort Service
 
Russian Call Girls In Rajiv Chowk Gurgaon ❤️8448577510 ⊹Best Escorts Service ...
Russian Call Girls In Rajiv Chowk Gurgaon ❤️8448577510 ⊹Best Escorts Service ...Russian Call Girls In Rajiv Chowk Gurgaon ❤️8448577510 ⊹Best Escorts Service ...
Russian Call Girls In Rajiv Chowk Gurgaon ❤️8448577510 ⊹Best Escorts Service ...
 
Lundin Gold - Q1 2024 Conference Call Presentation (Revised)
Lundin Gold - Q1 2024 Conference Call Presentation (Revised)Lundin Gold - Q1 2024 Conference Call Presentation (Revised)
Lundin Gold - Q1 2024 Conference Call Presentation (Revised)
 
Eluru Call Girls Service ☎ ️93326-06886 ❤️‍🔥 Enjoy 24/7 Escort Service
Eluru Call Girls Service ☎ ️93326-06886 ❤️‍🔥 Enjoy 24/7 Escort ServiceEluru Call Girls Service ☎ ️93326-06886 ❤️‍🔥 Enjoy 24/7 Escort Service
Eluru Call Girls Service ☎ ️93326-06886 ❤️‍🔥 Enjoy 24/7 Escort Service
 
Whitefield CALL GIRL IN 98274*61493 ❤CALL GIRLS IN ESCORT SERVICE❤CALL GIRL
Whitefield CALL GIRL IN 98274*61493 ❤CALL GIRLS IN ESCORT SERVICE❤CALL GIRLWhitefield CALL GIRL IN 98274*61493 ❤CALL GIRLS IN ESCORT SERVICE❤CALL GIRL
Whitefield CALL GIRL IN 98274*61493 ❤CALL GIRLS IN ESCORT SERVICE❤CALL GIRL
 
Falcon Invoice Discounting: Unlock Your Business Potential
Falcon Invoice Discounting: Unlock Your Business PotentialFalcon Invoice Discounting: Unlock Your Business Potential
Falcon Invoice Discounting: Unlock Your Business Potential
 
Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...
Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...
Call Girls Service In Old Town Dubai ((0551707352)) Old Town Dubai Call Girl ...
 
Falcon's Invoice Discounting: Your Path to Prosperity
Falcon's Invoice Discounting: Your Path to ProsperityFalcon's Invoice Discounting: Your Path to Prosperity
Falcon's Invoice Discounting: Your Path to Prosperity
 
Phases of Negotiation .pptx
 Phases of Negotiation .pptx Phases of Negotiation .pptx
Phases of Negotiation .pptx
 
Falcon Invoice Discounting platform in india
Falcon Invoice Discounting platform in indiaFalcon Invoice Discounting platform in india
Falcon Invoice Discounting platform in india
 
Falcon Invoice Discounting: The best investment platform in india for investors
Falcon Invoice Discounting: The best investment platform in india for investorsFalcon Invoice Discounting: The best investment platform in india for investors
Falcon Invoice Discounting: The best investment platform in india for investors
 
Call Girls In Noida 959961⊹3876 Independent Escort Service Noida
Call Girls In Noida 959961⊹3876 Independent Escort Service NoidaCall Girls In Noida 959961⊹3876 Independent Escort Service Noida
Call Girls In Noida 959961⊹3876 Independent Escort Service Noida
 
Value Proposition canvas- Customer needs and pains
Value Proposition canvas- Customer needs and painsValue Proposition canvas- Customer needs and pains
Value Proposition canvas- Customer needs and pains
 

Леонід Кузьмін “Сам собі паблішер. Від сайту ігрової студії до універсального back-end провайдера і сервісу публікації ігор.”

  • 1. Сам собі паблішер. Від сайту ігрової студії до універсального back-end провайдера і сервісу публікації ігор. Leonid Kuzmin EFORB GAMEBOX
  • 2.
  • 3.
  • 4.
  • 5. REST and RESTful API RESTful API adhere to the REST architectural constraints. REST is not a protocol, but architectural style
  • 6. • Client-Server – determined by environment REST Architectural Constraints applied to web services REST and RESTful API
  • 7. • Client-Server – determined by environment • Stateless – data needed for authentication included in every request headers (e.g. Cookies) REST Architectural Constraints applied to web services REST and RESTful API
  • 8. • Client-Server – determined by environment • Stateless – data needed for authentication included in every request headers (e.g. Cookies) • Cacheable – HTTP cache control headers REST Architectural Constraints applied to web services REST and RESTful API
  • 9. • Client-Server – determined by environment • Stateless – data needed for authentication included in every request headers (e.g. Cookies) • Cacheable – HTTP cache control headers • Layered system – reverse proxy server could be used REST Architectural Constraints applied to web services REST and RESTful API
  • 10. • Client-Server – determined by environment • Stateless – data needed for authentication included in every request headers (e.g. Cookies) • Cacheable – HTTP cache control headers • Layered system – reverse proxy server could be used • Uniform interface REST Architectural Constraints applied to web services REST and RESTful API
  • 11. • Client-Server – determined by environment • Stateless – data needed for authentication included in every request headers (e.g. Cookies) • Cacheable – HTTP cache control headers • Layered system – reverse proxy server could be used • Uniform interface REST Architectural Constraints applied to web services - Identification of resources – URI REST and RESTful API
  • 12. • Client-Server – determined by environment • Stateless – data needed for authentication included in every request headers (e.g. Cookies) • Cacheable – HTTP cache control headers • Layered system – reverse proxy server could be used • Uniform interface REST Architectural Constraints applied to web services - Identification of resources – URI - Self-descriptive messages – HTTP headers: cache control headers, “Content-Type” header, “Accept” header REST and RESTful API
  • 13. • Client-Server – determined by environment • Stateless – data needed for authentication included in every request headers (e.g. Cookies) • Cacheable – HTTP cache control headers • Layered system – reverse proxy server could be used • Uniform interface REST Architectural Constraints applied to web services - Identification of resources – URI - Self-descriptive messages – HTTP headers: cache control headers, “Content-Type” header, “Accept” header - Standard HTTP methods: POST, GET, PUT, DELETE and HTTP Response codes REST and RESTful API
  • 14. • Client-Server – determined by environment • Stateless – data needed for authentication included in every request headers (e.g. Cookies) • Cacheable – HTTP cache control headers • Layered system – reverse proxy server could be used • Uniform interface REST Architectural Constraints applied to web services - Identification of resources – URI - Self-descriptive messages – HTTP headers: cache control headers, “Content-Type” header, “Accept” header - Standard HTTP methods: POST, GET, PUT, DELETE and HTTP Response codes - Resource entities can be filtered by referencing resources properties values in URI REST and RESTful API
  • 15. This is not RESTful POST /createAccount Request: Cookie: ... {name: Petro, email: president@gov.ua} Response: {name: Petro, email: president@gov.ua} GET /getAllAccounts?name=Petro Request: Cookie: ... Response: [{name: Petro, email: president@gov.ua}, {name: admin, email: admin@gov.ua}] GET /findAccounts?name=Petro Request: Cookie: ... Response: [{name: Petro, email: president@gov.ua}] GET /getAccount?id=1 Request: Cookie: ... Response: {name: Petro, email: president@gov.ua} POST /updateAccount Request: Cookie: ... {id: 1, name: PetroP, email: president@gov.ua} Response: {name: PetroP, email: president@gov.ua} POST /deleteAccount Request: Cookie: ... {id: 1} Response codes Success: 200 OK Fail: 200 OK {error: …}
  • 17. POST /accounts Request: Cookie: ... Content-Type: application/json Accept: application/json {name: Petro, email: president@gov.ua} Response: Cache-Control : private, max-age=0, no-cache Content-Type: application/json {name: Petro, email: president@gov.ua} GET /accounts/1 Request: Cookie: ... Accept: application/json Response: Cache-Control : private, max-age=0, no-cache Content-Type: application/json {name: Petro, email: president@gov.ua} GET /accounts Request: Cookie: ... Accept: application/json Response: Cache-Control : private, max-age=0, no-cache Content-Type: application/json [{name: Petro, email: president@gov.ua}, {name: admin, email: admin@gov.ua}] GET /accounts?name=Petro Request: Cookie: ... Accept: application/json Response: Cache-Control : private, max-age=0, no-cache Content-Type: application/json [{name: Petro, email: president@gov.ua}] PUT /accounts/1 Request: Cookie: ... Accept: application/json {name: PetroP, email: president@gov.ua} Response: Cache-Control : private, max-age=0, no-cache Content-Type: application/json {name: PetroP, email: president@gov.ua} DELETE /accounts/1 Request: Cookie: ... Content-Type: application/json Accept: application/json Response codes Success: 200 OK, 201 Created Fail: 400 Bad Request, 404 Not Found, 403 Forbidden, 500 Internal Server Error
  • 18. Calculated data in REST Int sum (a, b) { return a + b; } • GET /sum – collection of all integers' sums: [0, 1, 2, 3, ..., N, ...] • GET /sum/N – collection of all sums of 2 and all integers: [2, 3, 4, ..., N, ...] • GET/sum/N/M–N+M • POST /account/1/leaderboard/2 {score: 50} • GET /account/1/leaderboard/2 {score: 100} • GET /leaderboard/2 [ { account_id: 1, score: 100, position: 2 }, { account_id: 2, score: 200, position: 1 } Game Leaderboard [ { account_id: 1, score: 50, game_id: 2 }, { account_id: 1, score: 100, game_id: 2 }, { account_id: 2, score: 150, game_id: 2 }, { account_id: 2, score: 200, game_id: 2 }]
  • 19. RESTful: Pros and Cons PROS • Simply • Consistent • Easy to debug • Scalable
  • 20. RESTful: Pros and Cons PROS CONS • Simply • Consistent • Easy to debug • Scalable • Strange • Lack of support • Stateless • Not a protocol
  • 21. What we got from REST • Direct mapping of resources to DB entities (SQL tables, NoSQL documents collections): POST /accounts => INSERT INTO accounts
  • 22. What we got from REST • Direct mapping of resources to DB entities (SQL tables, NoSQL documents collections): POST /accounts => INSERT INTO accounts • Same access policies for different authentication flows (Cookies authorization, HTTP basic authorization)
  • 23. What we got from REST • Direct mapping of resources to DB entities (SQL tables, NoSQL documents collections): POST /accounts => INSERT INTO accounts • Same access policies for different authentication flows (Cookies authorization, HTTP basic authorization) • URI aliases (/accounts/1 => / me, /account/1/gamedata =>/my/gamedata)
  • 24. What we got from REST • Direct mapping of resources to DB entities (SQL tables, NoSQL documents collections): POST /accounts => INSERT INTO accounts • Same access policies for different authentication flows (Cookies authorization, HTTP basic authorization) • URI aliases (/accounts/1 => / me, /account/1/gamedata =>/my/gamedata) • Common design guidelines
  • 25. What we got from REST • Direct mapping of resources to DB entities (SQL tables, NoSQL documents collections): POST /accounts => INSERT INTO accounts • Same access policies for different authentication flows (Cookies authorization, HTTP basic authorization) • URI aliases (/accounts/1 => / me, /account/1/gamedata => / my/gamedata) • Common design guidelines • Same back-end for external and internal services
  • 26. What we got from REST • Direct mapping of resources to DB entities (SQL tables, NoSQL documents collections): POST /accounts => INSERT INTO accounts • Same access policies for different authentication flows (Cookies authorization, HTTP basic authorization) • URI aliases (/accounts/1 => / me, /account/1/gamedata => / my/gamedata) • Common design guidelines • Same back-end for external and internal services • Common test flow
  • 27. REST API Testing Test Unit = HTTP Verb + URI + Request headers + [Request Body] HTTP Verb URL Request headers + [Request Body] Test steps 1. Start the Application 2. Prepare test data in storage if needed 3. Perform HTTP API query 4. Check response headers and body 5. Check affected piece of data retrieved from storage directly or even through the REST API Storage API could be stubbed and spied, in this case storage API calls should be checked on step 5.
  • 28. Our API Building Codex 1. Everything is a collection
  • 29. Our API Building Codex 1. Everything is a collection 2. Every collection has CRUD (POST, GET, PUT, DELETE)
  • 30. Our API Building Codex 1. Everything is a collection 2. Every collection has CRUD (POST, GET, PUT, DELETE) 3. Use HTTP response codes
  • 31. Our API Building Codex 1. Everything is a collection 2. Every collection has CRUD (POST, GET, PUT, DELETE) 3. Use HTTP response codes 4. Filter and pagination through URI params
  • 32. Our API Building Codex 1. Everything is a collection 2. Every collection has CRUD (POST, GET, PUT, DELETE) 3. Use HTTP response codes 4. Filter and pagination through URI params 5. API version in URI
  • 33. Our API Building Codex 1. Everything is a collection 2. Every collection has CRUD (POST, GET, PUT, DELETE) 3. Use HTTP response codes 4. Filter and pagination through URI params 5. API version in URI 6. Communicate with developers
  • 34. Our API Building Codex 1. Everything is a collection 2. Every collection has CRUD (POST, GET, PUT, DELETE) 3. Use HTTP response codes 4. Filter and pagination through URI params 5. API version in URI 6. Communicate with developers 7. Documentation in code and tests
  • 35. Our API Building Codex 1. Everything is a collection 2. Every collection has CRUD (POST, GET, PUT, DELETE) 3. Use HTTP response codes 4. Filter and pagination through URI params 5. API version in URI 6. Communicate with developers 7. Documentation in code and tests 8. No exceptions
  • 36. Our API Building Codex 1. Everything is a collection 2. Every collection has CRUD (POST, GET, PUT, DELETE) 3. Use HTTP response codes 4. Filter and pagination through URI params 5. API version in URI 6. Communicate with developers 7. Documentation in code and tests 8. No exceptions 9. No exceptions for “No exceptions”
  • 37. How games are published Traditional Way Our Way • Sign contract • Satisfy publisher requirements • Deploy game somewhere and provide link to publisher or send game archive directly • Receive profit according to contract • Register, fill billing info • Fill game description fields, upload game archive through API • Game appears in available games list for clients • Start earning from ads and transactions
  • 38. Our publishing way vs traditional way Increased time between complete game and actual publishing Almost immediate game publishing You need to implement and maintain back-end for your games Back-end services included You need to implement monetization (ads or transactions) Ads are served by our service, payment system could be integrated with API. You receive profit share. Payment reports are often poor Full reports from ad providers and payment systems You need to maintain your own deploy cycle We have sandbox mode where you can view your game before actual publishing. Deployment API can be Traditional Way Our Way
  • 39. Embedding to third-party WEB resources • IFrame • Construct application on the fly on page with JS • Subdomain with third-party wrapper
  • 40. Embedding: IFrame PROS • Easy and obvious • No cross-domain requests • Client can control own page view • Client can control own page view • No conflicts with client's JS and CSS
  • 41. Embedding: IFrame PROS CONS • Easy and obvious • No cross-domain requests • Client can control own page view • Client can control own page view • No conflicts with client's JS and CSS • Client should be explicitly identified in each AJAX request • Client can't customize our application view • Third-party cookies browser policies • No direct links to our application's subpages • Increased page construction time
  • 42. Embedding: Subdomain PROS • No third-party cookies • Client identified by domain • No cross-domain requests • Direct links to our application subpages • Less page construction time • No conflicts with client's JS and CSS
  • 43. Embedding: Subdomain PROS CONS • No third-party cookies • Client identified by domain • No cross-domain requests • Direct links to our application subpages • Less page construction time • No conflicts with client's JS and CSS • Server configuration on the side of Client • Client can't customize application view by own CSS or JS • Client can't customize own views in wrapper
  • 44. Embedding: Construct on the fly with JS PROS • No third-party cookies • Client identified by domain • No cross-domain requests • Client can customize our application view • Client can control own page • Direct links to our application subpages
  • 45. Embedding: Construct on the fly with JS PROS CONS • No third-party cookies • Client identified by domain • No cross-domain requests • Client can customize our application view • Client can control own page • Direct links to our application subpages • Increased page construction time • Restricting customization of our application by Client's CSS • Isolating our application from client's JS
  • 46. Construct on the fly solutions • Increased page construction time – pre- rendered HTML • Restricting customization of our application's CSS – random dynamic prefix for CSS CSS client.css.tpl: .{{placeholder}}_class { color: red; } GET /client.css .SOME_RANDOM_VALUE_class { color: red; } JS app.js.tpl: function App (cssPrefix) { var container = document.createElement('div'); container.className = cssPrefix + '_class'; } new App({{placeholder}}); GET app.js … new App(‘SOME_RANDOM_VALUE’); • Isolating our application from client's JS – wrap all code in closure, do not touch existing objects (internal browser objects, DOM objects etc.) (function () { //all application code here })(); var container = document.createElement('div'); container.remove = function () {…}; //wrong function remove (element) {…} //right
  • 47. Our technologies and tools • Back-end • Front-end - Node.js (Sails.js, pm2, Grunt) - PostgreSQL - HTML 5, CSS3 - Require.js - Google Closure Compiler + Almond.js for production build