狠狠撸

狠狠撸Share a Scribd company logo
Maras Chen
Maraschen@codingweb.tw
Laravel 單頁面應用與前後端分離開發
? Maras Chen
? 4Gamers 後端工程師
? https://codingweb.tw
? maraschen@codingweb.tw
? C# / PHP / Python
LaravelConf2017
摘要
1.什麼是 SPA
2.Laravel API 開發
3.Laravel API 開發 Packages
LaravelConf2017
4. Laravel x Vue
5. 地雷分享
6. Laravel 5.5 New Artisan
什麼是 SPA ?
LaravelConf2017
LaravelConf2017
什麼是 SPA ?
? Single Page Application
? 中文譯名「單頁式應用程式」
? 只在一個頁面中完成動作
LaravelConf2017
圖片來源: https://msdn.microsoft.com/en-us/magazine/dn463786.aspx LaravelConf2017
SPA 優點
? 頁面能更快的被呈現出來
? UX 大幅提升
? 降低資料傳輸
? APP、Web前端 不用重複開發
LaravelConf2017
SPA 缺點
? SEO 問題
? 舊型瀏覽器不支援
LaravelConf2017
為什麼我們需要 ?
? 前端/後端不維護相同專案
? 前/後端可以不用互相了解程式碼資料夾結構
? 讓後端只需要顧好 Request 資料處理與商業邏輯
? 讓前端選擇自己的前端框架
LaravelConf2017
前端與後端的分工
LaravelConf2017
傳統工作示意圖
LaravelConf2017
? HTML
? CSS
? Javascript
? RWD
? PHP
? Database
? Server後端 全端工程師
設計師
? Illustrator
? photoshop
? flash
? HTML
? CSS
? RWD
串資料是我們 所以資料出不來或掛掉都是我們
LaravelConf2017
後端工程師要的很簡單 就只是…
LaravelConf2017
LaravelConf2017
最棒的一點就是 …
LaravelConf2017
可以讓前端自己串資料
LaravelConf2017
當有前/後端透過SPA分工後
LaravelConf2017
工作內容
? PHP
? Database
? Server
當資料出問題…
後端工程師
前端工程師
工作內容
? CSS
? Javascript
? RWD
請後端工程師修復
當設計或是畫面出問題…
請前端工程師修復
透過文件溝通
開發流程
透過技術文件溝通
設計 Wireframe
後端工程師
前端工程師 LaravelConf2017
技術文件的溝通
LaravelConf2017
? APIDOC
? http://apidocjs.com/
? Sample code:
? https://goo.gl/dDN8oy
? Demo
? https://goo.gl/NccwQ1
LaravelConf2017
LaravelConf2017
後端總是開發的很慢?
1. 可以先拿 example response 來串接API - http://myjson.com/
2. 前端遵循 restful 方式串接API - https://github.com/typicode/json-server
LaravelConf2017
LaravelConf2017
Laravel API 開發 STEP 1 (TDD)
LaravelConf2017
Laravel API 開發 STEP 2 (Provider)
LaravelConf2017
Laravel API 開發 STEP 3 (Route)
LaravelConf2017
API 認證及授權
? JSON Web Tokens (JWT)
? OAuth2 授權 – Laravel5.3-Passport
LaravelConf2017
JSON Web Token 認證
LaravelConf2017
圖片來源:https://auth0.com/blog/cookies-vs-tokens-definitive-guide/
JSON Web Token 組成
LaravelConf2017https://jwt.io
Laravel 5.2 API 認證
? Laravel 5.2+ 提供 guard web、api 認證
1. 需要先在 User 建立 api_token 欄位
2. 接著用 seeder 或是在會員註冊的時候生成一個 60 碼隨機字串
3. 在 call 受保護的 api 時傳入參數 api_token 或是 header 帶 Bearer
<api_token>
LaravelConf2017
Laravel 5.2 API 認證 - API 開發 STEP 1 (TDD)
LaravelConf2017
Laravel 5.2 API 認證 - API 開發 STEP 2 (Route)
LaravelConf2017
Laravel 5.3 - API 認證與授權 - Passport
? Laravel 5.3+ 整合了 OAuth2-Server – Passport
? Authorization Code Grant Flow
? Implicit Grant Flow
? Resource Password Owner Grant Flow
LaravelConf2017
OAuth2 認證
? Laravel 5.3 以後提供 Passport 用法
? 可以參考一下這篇教學
https://goo.gl/7wJ4Wr
LaravelConf2017
Passport OAuth2 測試怎麼寫 …
LaravelConf2017
Laravel Passport Testing - ActingAs
LaravelConf2017
Laravel API 套件
LaravelConf2017
Dingo
? 更複雜的需求?
? Content Negotiation (內容協商)
? Multiple Authentication Adapters (支援多種認證)
? API Versioning (版本控制)
? Rate Limiting (速率限制)
? Response Transformers and Formatters (統一格式回傳)
? Error and Exception Handling (錯誤及例外處理)
? Internal Requests (內部請求)
? API Blueprint Documentation (API 文件產生)
LaravelConf2017
Multiple Authentication Adapters
? Specific Authentication Providers
? Custom Authentication Providers
? Multiple Authentication Providers
? Http Basic
? JSON Web Tokens
? OAuth 2.0
LaravelConf2017
API Versioning
API 路由版本定義
LaravelConf2017
Response Transformers and Formatters
LaravelConf2017
API Blueprint Documentation
LaravelConf2017
Laravel x Vuejs
? Laravel5.3+ 預設可以在專案中安裝 bootstrap + vue + axios + jquery
LaravelConf2017
LaravelConf2017
axios
LaravelConf2017
Vuex
? 狀態管理模式 – 集中式儲存組件狀態
? 適用於中大型 SPA 專案
LaravelConf2017
LaravelConf2017
LaravelConf2017
LaravelConf2017
實際上線地雷案例
LaravelConf2017
LaravelConf2017
● CORS (跨來源資源共享) - 受同源政策影響
● X-Rate-Limit-Limit (頻率限制)
● SEO (搜尋引擎最佳化)
同源政策 (Same-origin policy)
https://a.com
https://a.com https://b.com
CORS – 在後端解決
? 套件
? https://github.com/barryvdh/laravel-cors
LaravelConf2017
CORS – 前端解決 (Vue2)
LaravelConf2017
來源參考(如何在 Vue-CLI 建立的開發環境呼叫跨域遠端 RESTful APIs): https://kuro.tw/
Local Only!!
X-RateLimit-Limit
LaravelConf2017
SEO – Prerender service
? Prerender.io (https://prerender.io)
? 免費 250 個頁面
? 開源 (https://github.com/prerender)
Request Nginx Crawler?
Prerender.io
Application
Yes
No
LaravelConf2017
SEO – Server side render
LaravelConf2017
LaravelConf2017
LaravelConf2017
LaravelConf2017
總結
LaravelConf2017
? 對於前端工程師
? 可以選擇 Javascript 框架(VueJS、reactJS、angularJS )
? 取得資料後的頁面應用
? 對於後端工程師
? 不需要管畫面 僅管測試及邏輯通過 當一個真正的全端後端工程師
? 可以不用再被前端凹了
可以更專注在後端工程的應用(資料存取、商業邏輯)
LaravelConf2017
前後端工程師缺一不可
LaravelConf2017
如果沒有前端 ....
LaravelConf2017
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
如果沒有後端 ....
LaravelConf2017
LaravelConf2017
LaravelConf2017
http://spa-demo.codingweb.tw/
設計 API 要很謹慎
LaravelConf2017
案例分享 – 某單位可任意使用者修改密碼
? 可任意修改其他使用者的密碼,進而查看其他使用者個資、使用
記錄,註冊/刪除卡片。
https://zeroday.hitcon.org/vulnerability/ZD-2017-00300
LaravelConf2017
LaravelConf2017
Laravel 5.5 New Artisan
LaravelConf2017
LaravelConf2017
LaravelConf2017
Source Code
? Single Page Application (Laravel+VueJS) sample code:
? Backend(Laravel5.4+dingo): https://github.com/Maras0830/spa-example-with-laravel-vue-backend
? Frontend(Vue2): https://github.com/Maras0830/spa-example-with-laravel-vue-frontend
? Frontend(Nuxtjs): https://github.com/Maras0830/spa-example-with-laravel-vue-frontend-nuxtjs
? APIDoc: https://github.com/Maras0830/spa-example-with-laravel-vue-doc
LaravelConf2017
Q&A
LaravelConf2017
END
LaravelConf2017

More Related Content

What's hot (20)

[BurpSuiteJapan]Burp Suite回答編
[BurpSuiteJapan]Burp Suite回答編[BurpSuiteJapan]Burp Suite回答編
[BurpSuiteJapan]Burp Suite回答編
Burp Suite Japan User Group
?
Jsug spring bootコート?リーテ?ィンク? 接触篇 a contact
Jsug spring bootコート?リーテ?ィンク? 接触篇 a contactJsug spring bootコート?リーテ?ィンク? 接触篇 a contact
Jsug spring bootコート?リーテ?ィンク? 接触篇 a contact
tsukasa tamaru
?
B4USolution_API-Testing
B4USolution_API-TestingB4USolution_API-Testing
B4USolution_API-Testing
b4usolution .
?
POST/CON 2019 Workshop: Testing, Automated Testing, and Reporting APIs with P...
POST/CON 2019 Workshop: Testing, Automated Testing, and Reporting APIs with P...POST/CON 2019 Workshop: Testing, Automated Testing, and Reporting APIs with P...
POST/CON 2019 Workshop: Testing, Automated Testing, and Reporting APIs with P...
Postman
?
Api testing
Api testingApi testing
Api testing
HamzaMajid13
?
Swagger With REST APIs.pptx.pdf
Swagger With REST APIs.pptx.pdfSwagger With REST APIs.pptx.pdf
Swagger With REST APIs.pptx.pdf
Knoldus Inc.
?
Continuous Quality with Postman
Continuous Quality with PostmanContinuous Quality with Postman
Continuous Quality with Postman
Postman
?
Space Camp :: API Lifecycle, Part I: Build and Test an API
Space Camp :: API Lifecycle, Part I: Build and Test an APISpace Camp :: API Lifecycle, Part I: Build and Test an API
Space Camp :: API Lifecycle, Part I: Build and Test an API
Postman
?
[ES] Introducción a Java EE 7[ES] Introducción a Java EE 7
[ES] Introducción a Java EE 7
Eudris Cabrera
?
Postman: An Introduction for Testers
Postman: An Introduction for TestersPostman: An Introduction for Testers
Postman: An Introduction for Testers
Postman
?
Designing APIs with OpenAPI Spec
Designing APIs with OpenAPI SpecDesigning APIs with OpenAPI Spec
Designing APIs with OpenAPI Spec
Adam Paxton
?
フリーでできるセキュリティ インフラ(狈别蝉蝉耻蝉)编
フリーでできるセキュリティ インフラ(狈别蝉蝉耻蝉)编フリーでできるセキュリティ インフラ(狈别蝉蝉耻蝉)编
フリーでできるセキュリティ インフラ(狈别蝉蝉耻蝉)编
abend_cve_9999_0001
?
Spring GraphQL
Spring GraphQLSpring GraphQL
Spring GraphQL
VMware Tanzu
?
SSRF workshop
SSRF workshop SSRF workshop
SSRF workshop
Ivan Novikov
?
Spring starterによるSpring Boot Starter
Spring starterによるSpring Boot StarterSpring starterによるSpring Boot Starter
Spring starterによるSpring Boot Starter
Ryosuke Uchitate
?
What's new in Spring Batch 5
What's new in Spring Batch 5What's new in Spring Batch 5
What's new in Spring Batch 5
ikeyat
?
SyScan Singapore 2010 - Returning Into The PHP-Interpreter
SyScan Singapore 2010 - Returning Into The PHP-InterpreterSyScan Singapore 2010 - Returning Into The PHP-Interpreter
SyScan Singapore 2010 - Returning Into The PHP-Interpreter
Stefan Esser
?
Web API testing : A quick glance
Web API testing : A quick glanceWeb API testing : A quick glance
Web API testing : A quick glance
Dhanalaxmi K
?
闯耻苍颈迟を使った箩补惫补のテスト入门
闯耻苍颈迟を使った箩补惫补のテスト入门闯耻苍颈迟を使った箩补惫补のテスト入门
闯耻苍颈迟を使った箩补惫补のテスト入门
Satoshi Kubo
?
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
Naoki Nagazumi
?
Jsug spring bootコート?リーテ?ィンク? 接触篇 a contact
Jsug spring bootコート?リーテ?ィンク? 接触篇 a contactJsug spring bootコート?リーテ?ィンク? 接触篇 a contact
Jsug spring bootコート?リーテ?ィンク? 接触篇 a contact
tsukasa tamaru
?
B4USolution_API-Testing
B4USolution_API-TestingB4USolution_API-Testing
B4USolution_API-Testing
b4usolution .
?
POST/CON 2019 Workshop: Testing, Automated Testing, and Reporting APIs with P...
POST/CON 2019 Workshop: Testing, Automated Testing, and Reporting APIs with P...POST/CON 2019 Workshop: Testing, Automated Testing, and Reporting APIs with P...
POST/CON 2019 Workshop: Testing, Automated Testing, and Reporting APIs with P...
Postman
?
Swagger With REST APIs.pptx.pdf
Swagger With REST APIs.pptx.pdfSwagger With REST APIs.pptx.pdf
Swagger With REST APIs.pptx.pdf
Knoldus Inc.
?
Continuous Quality with Postman
Continuous Quality with PostmanContinuous Quality with Postman
Continuous Quality with Postman
Postman
?
Space Camp :: API Lifecycle, Part I: Build and Test an API
Space Camp :: API Lifecycle, Part I: Build and Test an APISpace Camp :: API Lifecycle, Part I: Build and Test an API
Space Camp :: API Lifecycle, Part I: Build and Test an API
Postman
?
[ES] Introducción a Java EE 7[ES] Introducción a Java EE 7
[ES] Introducción a Java EE 7
Eudris Cabrera
?
Postman: An Introduction for Testers
Postman: An Introduction for TestersPostman: An Introduction for Testers
Postman: An Introduction for Testers
Postman
?
Designing APIs with OpenAPI Spec
Designing APIs with OpenAPI SpecDesigning APIs with OpenAPI Spec
Designing APIs with OpenAPI Spec
Adam Paxton
?
フリーでできるセキュリティ インフラ(狈别蝉蝉耻蝉)编
フリーでできるセキュリティ インフラ(狈别蝉蝉耻蝉)编フリーでできるセキュリティ インフラ(狈别蝉蝉耻蝉)编
フリーでできるセキュリティ インフラ(狈别蝉蝉耻蝉)编
abend_cve_9999_0001
?
Spring starterによるSpring Boot Starter
Spring starterによるSpring Boot StarterSpring starterによるSpring Boot Starter
Spring starterによるSpring Boot Starter
Ryosuke Uchitate
?
What's new in Spring Batch 5
What's new in Spring Batch 5What's new in Spring Batch 5
What's new in Spring Batch 5
ikeyat
?
SyScan Singapore 2010 - Returning Into The PHP-Interpreter
SyScan Singapore 2010 - Returning Into The PHP-InterpreterSyScan Singapore 2010 - Returning Into The PHP-Interpreter
SyScan Singapore 2010 - Returning Into The PHP-Interpreter
Stefan Esser
?
Web API testing : A quick glance
Web API testing : A quick glanceWeb API testing : A quick glance
Web API testing : A quick glance
Dhanalaxmi K
?
闯耻苍颈迟を使った箩补惫补のテスト入门
闯耻苍颈迟を使った箩补惫补のテスト入门闯耻苍颈迟を使った箩补惫补のテスト入门
闯耻苍颈迟を使った箩补惫补のテスト入门
Satoshi Kubo
?
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
Naoki Nagazumi
?

Similar to LaravelConf Taiwan 2017 單頁面應用與前後端分離開發 (20)

給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由
Shengyou Fan
?
Route 機制
Route 機制Route 機制
Route 機制
Shengyou Fan
?
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
Shengyou Fan
?
验证与讯息
验证与讯息验证与讯息
验证与讯息
Shengyou Fan
?
验证与讯息
验证与讯息验证与讯息
验证与讯息
Shengyou Fan
?
Laravel installfest 工作坊 投影片
Laravel installfest 工作坊 投影片Laravel installfest 工作坊 投影片
Laravel installfest 工作坊 投影片
Shengyou Fan
?
开发环境建置
开发环境建置开发环境建置
开发环境建置
Shengyou Fan
?
国际图象互操作框架(IIIF) APIs和应用实例
国际图象互操作框架(IIIF)  APIs和应用实例 国际图象互操作框架(IIIF)  APIs和应用实例
国际图象互操作框架(IIIF) APIs和应用实例
Marcia Zeng
?
使用 RxJava 让数据流动 (Let data streaming using rxjava)
使用  RxJava 让数据流动 (Let data streaming using rxjava)使用  RxJava 让数据流动 (Let data streaming using rxjava)
使用 RxJava 让数据流动 (Let data streaming using rxjava)
Tankery Chen
?
Laravel - 簡介與環境設定
Laravel - 簡介與環境設定Laravel - 簡介與環境設定
Laravel - 簡介與環境設定
Vincent Chi
?
搁别蝉迟与面向资源的飞别产开发
搁别蝉迟与面向资源的飞别产开发搁别蝉迟与面向资源的飞别产开发
搁别蝉迟与面向资源的飞别产开发
topgeek
?
Laravel 5.2 教學
Laravel 5.2 教學Laravel 5.2 教學
Laravel 5.2 教學
Cloud Wu
?
Package 安裝與使用
Package 安裝與使用Package 安裝與使用
Package 安裝與使用
Shengyou Fan
?
Eventmachine Websocket 實戰
Eventmachine Websocket 實戰Eventmachine Websocket 實戰
Eventmachine Websocket 實戰
Mu-Fan Teng
?
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
Shengyou Fan
?
单页面开发遇到的一些问题
单页面开发遇到的一些问题单页面开发遇到的一些问题
单页面开发遇到的一些问题
Zhi Zhong
?
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
Alan Tsai
?
COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南
Shengyou Fan
?
厂础贰平台的灵活应用(吕毅、魏世江)
厂础贰平台的灵活应用(吕毅、魏世江)厂础贰平台的灵活应用(吕毅、魏世江)
厂础贰平台的灵活应用(吕毅、魏世江)
毅 吕
?
PHP & AppServ
PHP & AppServPHP & AppServ
PHP & AppServ
Ht Wang
?
給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由
Shengyou Fan
?
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
Shengyou Fan
?
Laravel installfest 工作坊 投影片
Laravel installfest 工作坊 投影片Laravel installfest 工作坊 投影片
Laravel installfest 工作坊 投影片
Shengyou Fan
?
国际图象互操作框架(IIIF) APIs和应用实例
国际图象互操作框架(IIIF)  APIs和应用实例 国际图象互操作框架(IIIF)  APIs和应用实例
国际图象互操作框架(IIIF) APIs和应用实例
Marcia Zeng
?
使用 RxJava 让数据流动 (Let data streaming using rxjava)
使用  RxJava 让数据流动 (Let data streaming using rxjava)使用  RxJava 让数据流动 (Let data streaming using rxjava)
使用 RxJava 让数据流动 (Let data streaming using rxjava)
Tankery Chen
?
Laravel - 簡介與環境設定
Laravel - 簡介與環境設定Laravel - 簡介與環境設定
Laravel - 簡介與環境設定
Vincent Chi
?
搁别蝉迟与面向资源的飞别产开发
搁别蝉迟与面向资源的飞别产开发搁别蝉迟与面向资源的飞别产开发
搁别蝉迟与面向资源的飞别产开发
topgeek
?
Laravel 5.2 教學
Laravel 5.2 教學Laravel 5.2 教學
Laravel 5.2 教學
Cloud Wu
?
Package 安裝與使用
Package 安裝與使用Package 安裝與使用
Package 安裝與使用
Shengyou Fan
?
Eventmachine Websocket 實戰
Eventmachine Websocket 實戰Eventmachine Websocket 實戰
Eventmachine Websocket 實戰
Mu-Fan Teng
?
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
COSCUP 2016 Laravel 部署工作坊 - 生態圈介紹
Shengyou Fan
?
单页面开发遇到的一些问题
单页面开发遇到的一些问题单页面开发遇到的一些问题
单页面开发遇到的一些问题
Zhi Zhong
?
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
探索 API 開發的挑戰與解決之道 | .NET Conf 2023 Taiwan
Alan Tsai
?
COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南
Shengyou Fan
?
厂础贰平台的灵活应用(吕毅、魏世江)
厂础贰平台的灵活应用(吕毅、魏世江)厂础贰平台的灵活应用(吕毅、魏世江)
厂础贰平台的灵活应用(吕毅、魏世江)
毅 吕
?
PHP & AppServ
PHP & AppServPHP & AppServ
PHP & AppServ
Ht Wang
?

LaravelConf Taiwan 2017 單頁面應用與前後端分離開發