個人簡介

Agenda

  • About me
  • Working Experiences
  • Restful api
  • Quick Search
    • Go
    • GraphQL
    • AWS

About Me

  • Python
  • PyConTW 2016-19 Staff
  • Hopax GM Team Data Engineer
  • Foxconn AI Team SWE
  • Pegatron SWE
  • Recently make a study of Python asyncio, welcome chat with me 

Working Experiences

  • HOPAX - 201803~Present
  • Foxconn - 201709~201801
  • Pegatron - 201203~201703

HOPAX

  • AOI 資料工程
    • Django
    • Restful API Design
    • PostgreSQL
    • Docker、Docker-compose
    • async programming
    • Echart -> Frontend

Foxconn

  • ETL
    • 重構 R -> Python's asyncio & coroutine
    • Oracle、PostgreSQL
    • Airflow 排程
  • 其他
    • Django-Q log collections
    • ElasticSearch -> for log
    • Restful API design

Pegatron

  • Develop test tools and integrations
    • Automation test -> win Autoit
    • Test tools -> C, C#
  • Allocation query system
    • Django、Celery、Redis、PostqreSQL
    • Restful API Design
  • ETL
    • Kafka、Hadoop、HBase
    • Selenium, Requests -> 爬蟲

Job Requirements

  • One of the following languages, Golang, PHP, Python, Nodejs, or Elixir.
  • Solid experience in API development. 
  • Any framework. -> Django
  • Linux based system. -> Ubuntu、OSX
  • AWS -> 囧囧,以前工作沒使用到

關於 Restful API 設計

Restful API 設計要點

  • Client-server (客戶端和伺服器結構)
  • Cacheable(利用快取機制增進性能)
  • Layered system(分層)
  • Stateless protocol(通訊協定無狀態性)
  • Uniform interface(統一介面)
  • Code-On-Demand (根據需求下載程式碼)

Client-server

  • 客戶端和伺服器端的設計
  • 請求只能由客戶端發起(請求-回應)
  • Restful 只規範伺服器與客戶端和伺服器的通訊協定

Cacheable

  • 利用快取增進性能
  • 最好定義能否使用快取
  • 客戶端在首次快取資源建立本地快取,下次時如果未更動就能使用快取
  • 省下 cpu 資源與網路流量
  • 網頁介面將它設定為快取

Layered system

  • 分層式的系統
  • 透過限制元件行為,將架構分解為若干層
  • 目的是透過代理、loading balance 等實現層級架構,以獲得更好的 scalability
by Trito Ho 2014

Stateless protocol

  • 無狀態性 範例
    • server 端可以使用 token,不用查證資料庫只需要做 self-containd state
    • 所有的狀態(session state)應該由 client 負責自行維護
  • API 要符合 atomic
  • 每個請求都需要這個請求的完整資料(例如使用時間)
  • 可以被重新呼叫
    • API 知道如何 handle
  • 例: 信用卡網路刷卡

Uniform interface

  • 介面應該基於物件而非動詞
    • 例如 遊戲裡面撿錢是建立 coin_change 這個物件
  • 四種動詞
    • 查詢: GET
    • 更新: PUT
    • 部分更新: PATCH
    • 新增: POST
    • 刪除: DELETE

關於 DRF

  • 主要就是搭建在 Django CBV 方便的設計上來處理 CRUD
  • 好用的地方是可以透過 Seralization、filtering、Router 與 Django models 溝通客製化 API 和建立 Rest 動詞
  • M157q 有一篇不錯分享大概講了很多 DRF 上的進階
  • 一句話以貫之: 不知道為什麼但就可以動了(好可怕)

Quick Research

都沒真正用過,但做了簡單研究

  • Golang
  • GraphQL
  • AWS

Golang

  • Goroutine
  • Channel
參考 1, 2, 3

Goroutine

  • 類似 Thread,讓 Go 容易達成 concurrency
  • 會造成 race condition,  example

Channels

  • 作為 Goroutine 之間通訊
    • 溝通傳遞 shared memory
  • Different with Queue
    • Queue 可以從另一端取出資料
    • shared memory 來溝通

覺得還不錯教學資源

GraphQL

  • 一種 API 查詢語言
  • 客戶端和伺服器的中介
  • 不需要綁定在某種資料庫上
  • Schema(菜單) 與 Resolver(廚房)
  • Query(點餐)

GraphQL v.s REST

  • REST
    • URL 定義 Resource 集合與個別資源路徑
  • GraphQL
    • An API defines how a client can load data from a server
    • 可以指定資源集合內的某個資源

REST 缺點

  • 參數、回傳值型別不固定
  • 多版本時,前後端常不匹配 -> 要向後相容
  • 會拿多餘的欄位 -> 限制
  • 不容易處理巢狀資源 -> 因為資源分開
  • 會不斷成長的 Endpoint 數量

覺得還不錯的教學

  • VPC - 網路
  • EC2 - 機器
  • S3 - 檔案
  • RDS - 資料庫
  • IAM - 操作權限
  • Lambda - 微服務
  • SNS - 通知
  • SQS - Queue
  • ColudFront - CDN
  • ColudWatch - 監控
  • Colud formation - CICD
  • OpsWork - CICD 機器設定
參考 1

AWS

KKStream

By Jason

KKStream

  • 60
Loading comments...

More from Jason