Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Flask 2.0 vs FastAPI in REST API development

tetsuya0617
October 16, 2021

Flask 2.0 vs FastAPI in REST API development

Python Conference Talk 2021 at Japan

tetsuya0617

October 16, 2021
Tweet

More Decks by tetsuya0617

Other Decks in Programming

Transcript

  1. Flask 2.0 vs FastAPI in REST API development
    Tetsuya (Jesse) Hirata
    @JesseTetsuya
    ————————————————————————————————————————————————————————————————————————————————
    Software Engineer at an EdTech company based in Tokyo.
    I mostly work in both data science and engineering. PyCon 2021 talk at !

    View Slide

  2. Background
    @JesseTetsuya
    - There are many kinds of web application frameworks.
    - REST API developments for micro service architecture
    and AI / ML projects are in demand.

    View Slide

  3. Numbers
    @JesseTetsuya
    1ZUIPO%FWFMPQFST4VSWFZ3FTVMUTz
    IUUQTXXXKFUCSBJOTDPNMQQZUIPOEFWFMPQFSTTVSWFZ
    l%FWFMPQFS4VSWFZz
    IUUQTJOTJHIUTTUBDLPWFSqPXDPNTVSWFZNPTUQPQVMBSUFDIOPMPHJFTXFCGSBNF

    View Slide

  4. Questions
    - How can we choose Python frameworks ?
    - Which is better Flask 2.0 or FastAPI ?
    @JesseTetsuya

    View Slide

  5. Approaches
    Evaluation based on the four criteria between
    Flask 2.0 and FastAPI for REST API development
    1. Variety of functions and extensions
    2. Performance(Speed and Stability)
    3. Flexibility of REST API Architecture
    4. Learning Cost
    @JesseTetsuya

    View Slide

  6. Follow up: Flask 2.0
    Flask has major version up in May 2021
    - Nested Blueprint
    - Async/Await
    - Type Hinting
    - 15x speed up of multipart/form-body
    - Routing shortcut
    - etc.
    @JesseTetsuya
    'MBTLSFMFTFOPUFIUUQTqBTLQBMMFUTQSPKFDUTDPNFOYDIBOHFT

    View Slide

  7. 'MBTL 'BTU"1*
    0WFSWJFX
    1ZUIPONJDSPGSBNFXPSLGPSCVJMEJOH
    XFCBQQMJDBUJPOT
    1ZUIPONJDSPGSBNFXPSLCBTFEPO
    TUBSMFUUFGPSCVJMEJOHXFCBQQMJDBUJPOT
    VTJOHBTZOD*0
    "VUIPS
    3FMFBTF%BUF
    -JDFODF
    "SNJO3POBDIFS
    #4%DMBVTFMJDFOTF
    4FCBTUJÂO3BNÍSF[
    .*5-JDFOTF
    *OUFSGBDF 84(* "4(*
    Flow up: Summary of Flask 2.0 and FastAPI
    @JesseTetsuya

    View Slide

  8. Answers
    1. Variety of functions and extensions
    2. Performance(Speed and Stability)
    3. Flexibility of REST API Architecture
    4. Learning Cost
    @JesseTetsuya

    View Slide

  9. 'MBTL 'BTU"1*
    'VODUJPOT
    #MVFQSJOU
    3FRVFTU"QQMJDBUJPO$POUFYU
    1ZEBOUJD

    +40/TDIFNB4QIJOY

    FUD
    "1*3PVUFS
    TUBSMFUUDPOUFYU

    1ZEBOUJD
    0QFO"1*
    FUD
    &YUFOTJPOT
    &YUFOTJPOT'MBTL"ENJO 'MBTL"VUI
    'MBTL42-"MDIFNZ 'MBTL&NBJM
    *OEFYTFBSDI SFTVMUT RVFSZ
    TJUFHJUIVCDPNqBTL

    &YUFOTJPOT/POF #VUUIFSFBSFTFWFSBM
    UIJSEQBSUZMJCSBSJFT

    *OEFYTFBSDI SFTVMUT RVFSZ
    TJUFHJUIVCDPNGBTUBQJ

    @JesseTetsuya
    'BTU"1*&YUFOTJPOMJTUIUUQTHJUIVCDPNNKIFBBXFTPNFGBTUBQJ
    'MBTL&YUFOTJPOIUUQTqBTLQBMMFUTQSPKFDUTDPNFOYFYUFOTJPOEFW
    1. Variety of functions and extensions

    View Slide

  10. Pydantic:
    - Input data validation and settings management using python type annotations.
    -> Pydantic have good match with data class, type hint, mypy, and OpenAPI.
    OpenAPI:
    - Swagger Editor
    - API document editor which has preview function
    - Swagger UI
    - Browsing the api documentation based on schemas written on yaml or json
    - OpenAPI Generator
    - Generate automatically the client server stub code based on the yaml or json
    -> Sphinx and JSON schema is recommended, specially in AI/ML projects.
    Request/Application Context:
    - Request context keeps track of the request-level data (URL, HTTP method, headers, request data, session info) and allows us to access them
    by using proxies such as request and session.
    - Application context keeps track of the application-level data (configuration variables, logger, database connection) allows us to access them
    by using proxies such as current_app and g.
    -> Next Slide
    @JesseTetsuya
    1. Variety of functions and extensions

    View Slide

  11. @JesseTetsuya
    1. Variety of functions and extensions
    GSPNGBTUBQJJNQPSU'BTU"1* 3FRVFTU
    BQQ'BTU"1*

    !BQQHFU

    [email protected]@JOGP SFRVFTU3FRVFTU

    [email protected]
    SFUVSO\[email protected]@IPTU^
    GSPNqBTLJNQPSU'MBTL [email protected] SFRVFTU KTPOJGZ
    BQQ'MBTL @@[email protected]@

    !BQQHFU

    [email protected]@JOGP

    [email protected]
    [email protected] GzSFRVFTU\[email protected]^l

    SFUVSOKTPOJGZ \[email protected]@IPTU^

    'MBTL
    'BTU"1*

    View Slide

  12. @JesseTetsuya
    1. Variety of functions and extensions
    8FC4FSWFS
    /HJOY"QBDIF

    8*4(*4FSWFS
    V84(*(VOJDPSO

    "QQMJDBUJPO$POUFYU
    4UBDL
    XFSL[FVHMPDBM-PDBM4UBDL
    3FRVFTU
    $POUFYU4UBDL
    XFSL[FVHMPDBM-PDBM4UBDL
    'MBTL"QQMJDBUJPO
    '[email protected]

    'VODUJPOT
    (MPCBM
    8PSLFS
    BUISFBE
    QSPDFTT
    PSDPSPVUJOF

    3FRVFTU
    3FTQPOTF
    4QBXOT
    1VTIFT
    "QQMJDBUJPO1SPYZ
    [email protected] H

    3FRVFTU1SPYZ
    SFRVFTU TFTTJPO

    UISFBETBGFBOE
    UISFBEVOJRVFz

    View Slide

  13. @JesseTetsuya
    1. Variety of functions and extensions
    - Context-Locals are implemented
    by werkzeug.local.LocalStack
    "QQMJDBUJPO$POUFYU
    4UBDL
    XFSL[FVHMPDBM-PDBM4UBDL
    3FRVFTU
    $POUFYU4UBDL
    XFSL[FVHMPDBM-PDBM4UBDL
    (MPCBM
    $SFBUFUISFBET
    [email protected]
    DPOUFYU
    VOJRVFBDDFTT

    YYYQZ
    [email protected]
    DPOUFYU
    VOJRVFBDDFTT

    [email protected]
    DPOUFYU
    VOJRVFBDDFTT

    "DDFTTEBUB
    $POUFYU-PDBMT
    ʜ
    ʜ
    GSPNXFSL[FVHMPDBMJNQPSU-PDBM1SPYZ
    GSPNXFSL[FVHMPDBMJNQPSU-PDBM4UBDL
    ʜ
    ʜ
    ʜ
    DPOUFYUMPDBMT
    @[email protected]@TUBDL-PDBM4UBDL

    @[email protected]@TUBDL-PDBM4UBDL

    [email protected]'MBTL-PDBM1SPYZ @[email protected]
    UZQFJHOPSF
    SFRVFTU3FRVFTU-PDBM1SPYZ QBSUJBM @[email protected]@PCKFDU SFRVFTU

    UZQFJHOPSF
    TFTTJPO4FTTJPO.JYJO-PDBM1SPYZ UZQFJHOPSF
    QBSUJBM @[email protected]@PCKFDU TFTTJPO



    [email protected]"QQ$UY(MPCBMT-PDBM1SPYZ QBSUJBM @[email protected]@PCKFDU H

    UZQFJHOPSF
    qBTLTSDqBTLHMPCBMQZ
    - The right picture means that a unique
    werkzeug.local.LocalStack object has multiple unique threads
    - The data need to be stored in a way that only one
    worker(thread) can retrieve back, which means the data get back
    their own specific data that’s unique to each worker(thread).

    View Slide

  14. 'MBTL 'BTU"1*
    'VODUJPOT
    #MVFQSJOU
    3FRVFTU"QQMJDBUJPO$POUFYU
    1ZEBOUJD

    +40/TDIFNB4QIJOY

    FUD
    "1*3PVUFS
    TUBSMFUUDPOUFYU

    1ZEBOUJD
    0QFO"1*
    FUD
    &YUFOTJPOT
    &YUFOTJPOT'MBTL"ENJO 'MBTL"VUI
    'MBTL42-"MDIFNZ 'MBTL&NBJM
    *OEFYTFBSDI SFTVMUT RVFSZ
    TJUFHJUIVCDPNqBTL

    &YUFOTJPOT/POF #VUUIFSFBSFTFWFSBM
    UIJSEQBSUZMJCSBSJFT

    *OEFYTFBSDI SFTVMUT RVFSZ
    TJUFHJUIVCDPNGBTUBQJ

    @JesseTetsuya
    'BTU"1*&YUFOTJPOMJTUIUUQTHJUIVCDPNNKIFBBXFTPNFGBTUBQJ
    'MBTL&YUFOTJPOIUUQTqBTLQBMMFUTQSPKFDUTDPNFOYFYUFOTJPOEFW
    1. Variety of functions and extensions

    View Slide

  15. Answers
    1. Variety of functions and extension
    2. Performance(Speed and Stability)
    3. Flexibility of REST API Architecture
    4. Learning Cost
    @JesseTetsuya

    View Slide

  16. @JesseTetsuya
    2. Performance(Speed and Stability)
    8):
    5IF*0CPVOEQSPDFTTJOHMBSHFMZJOqVFODFTUIFGSBNFXPSLBOEBQQMJDBUJPOTFSWFSTFMFDUJPO
    XIJMF$16CPVOEQSPDFTTJOHDBOCFSFDPWFSFECZPUIFSUZQFPG1ZUIPOTVDIBT$ZUIPO
    PSPUIFSMBOHVBHFTFMFDUJPOTCFDBVTF(MPCBM*OUFSQSFU-PDL (*-
    DPOTUSBJOUTJOHMFQSPDFTTBOETJOHMFUISFBE
    8)"5
    4JNQMFTUBOETBNFBTZODCBTFEDPEFPG'MBTL VXTHJ
    BOE'BTU"1* VWJDPSO
    POBTJOHMFXPSLFS
    )08
    5PPMT7FHFUB -0$645 "QBDIF#FODINBSL "QBDIF+.FUFSʜ
    .FUSJDT-BUFODZ TQFFE
    4VDDFTT3BUF TUBCJMJUZ

    7FHFUBIUUQTHJUIVCDPNUTFOBSUWFHFUB

    View Slide

  17. @JesseTetsuya
    JNQPSUBTZODJP
    JNQPSUUJNF
    GSPNqBTLJNQPSU#MVFQSJOU 'MBTL
    BQQ'MBTL @@[email protected]@

    [email protected]#MVFQSJOU [email protected] @@[email protected]@

    [email protected] OBNFTUS TFDqPBU
    TUS
    QSJOU G\OBNF^TUBSUFE

    BXBJUBTZODJPTMFFQ TFD

    QSJOU G\OBNF^pOJTIFE

    SFUVSOG\OBNF^\TFD^TFD
    [email protected]

    [email protected]
    TUS
    TUBSUUJNFUJNF

    SFTVMUTBXBJUBTZODJPHBUIFS
    [email protected] 5BTL"

    [email protected] 5BTL#

    [email protected] 5BTL$



    QSJOU G\SFTVMUT^

    QSJOU GQSPDFTTUJNF\UJNFUJNF
    TUBSU^

    SFUVSO"MMUBTLTBSFEPOF
    [email protected] [email protected]

    'MBTLl"TZODz#BTFE$PEF
    2. Performance(Speed and Stability)
    [email protected]
    JNQPSUBTZODJP
    JNQPSUUJNF
    GSPNGBTUBQJJNQPSU'BTU"1*
    [email protected]'BTU"1*

    [email protected] OBNFTUS TFDqPBU
    TUS
    QSJOU G\OBNF^TUBSUFE

    BXBJUBTZODJPTMFFQ TFD

    QSJOU G\OBNF^pOJTIFE

    SFUVSOG\OBNF^\TFD^TFD
    [email protected]

    [email protected]
    TUS
    TUBSUUJNFUJNF

    SFTVMUTBXBJUBTZODJPHBUIFS
    [email protected] 5BTL"

    [email protected] 5BTL#

    [email protected] 5BTL$



    QSJOU G\SFTVMUT^

    QSJOU GQSPDFTTUJNF\UJNFUJNF
    TUBSU^

    SFUVSO"MMUBTLTBSFEPOF
    'BTU"1*"TZOD#BTFE$PEF

    View Slide

  18. @JesseTetsuya
    2. Performance(Speed and Stability)
    *NBHFXSJUUFOCZ5FUTVZB)JSBUBIUUQTUFDIDMBTTJKQFOUSZ
    7FHFUB"UUBDL
    FDIP(&5IUUQcWFHFUBBUUBDL
    SBUFEVSBUJPOTcUFF

    View Slide

  19. 'MBTL VXTHJ
    'BTU"1* VWJDPSO

    4QFFE
    4UBCJMJUZ
    3FRVFTUT
    %VSBUJPOT T T
    -BUFODJFTNT
    T T T T T T
    #ZUFT*O
    #ZUFT0VU
    4VDDFTT
    4UBUVT$PEFT
    &SSPS4FU
    3FRVFTUT
    %VSBUJPOT T NT
    -BUFODJFTNT
    NT NT NT NT NT
    NT
    #ZUFT*O
    #ZUFT0VU
    4VDDFTT
    4UBUVT$PEFT
    &SSPS4FU
    @JesseTetsuya
    2. Performance(Speed and Stability)

    View Slide

  20. @JesseTetsuya
    2. Performance(Speed and Stability)
    IUUQTXFCGSBNFXPSLTCFODINBSLOFUMJGZBQQDPNQBSF GGBTUBQJ qBTL
    IUUQTHJUIVCDPNUIFCFODINBSLFSXFCTJUF
    IUUQTXFCGSBNFXPSLTCFODINBSLOFUMJGZBQQDPNQBSF GGBTUBQJ qBTL

    View Slide

  21. @JesseTetsuya
    TQBXOFEV84(*XPSLFS BOEUIFPOMZ
    QJE DPSFT

    5BTL"TUBSUFE
    5BTL#TUBSUFE
    5BTL$TUBSUFE
    5BTL$pOJTIFE
    5BTL"pOJTIFE
    5BTL#pOJTIFE
    <5BTL"TFD 5BTL#TFD 5BTL$TFD>
    QSPDFTTUJNF

    \WBSTJOCZUFT^<4VO0DU>(&5
    HFOFSBUFECZUFTJONTFDT )551
    IFBEFSTJOCZUFT TXJUDIFTPODPSF

    5BTL"TUBSUFE
    5BTL#TUBSUFE
    5BTL$TUBSUFE
    5BTL$pOJTIFE
    5BTL"pOJTIFE
    5BTL#pOJTIFE
    <5BTL"TFD 5BTL#TFD 5BTL$TFD>
    QSPDFTTUJNF

    \WBSTJOCZUFT^<4VO0DU>(&5
    HFOFSBUFECZUFTJONTFDT )551
    IFBEFSTJOCZUFT TXJUDIFTPODPSF

    5BTL"TUBSUFE
    5BTL#TUBSUFE
    5BTL$TUBSUFE
    5BTL$pOJTIFE
    5BTL"pOJTIFE
    5BTL#pOJTIFE
    <5BTL"TFD 5BTL#TFD 5BTL$TFD>
    QSPDFTTUJNF
    ʜ
    ʜ
    ʜ
    'MBTLl"TZODz#BTFE$PEF0VUQVU
    2. Performance(Speed and Stability)
    */'06WJDPSOSVOOJOHPOIUUQ 1SFTT$53-$UPRVJU

    5BTL"TUBSUFE
    5BTL#TUBSUFE
    5BTL$TUBSUFE
    5BTL"TUBSUFE
    5BTL#TUBSUFE
    5BTL$TUBSUFE
    5BTL"TUBSUFE
    5BTL#TUBSUFE
    5BTL$TUBSUFE
    5BTL$pOJTIFE
    5BTL"TUBSUFE
    5BTL#TUBSUFE
    5BTL$TUBSUFE
    5BTL$pOJTIFE
    5BTL"pOJTIFE
    5BTL"TUBSUFE
    5BTL#TUBSUFE
    5BTL$TUBSUFE
    5BTL"pOJTIFE
    5BTL$pOJTIFE
    5BTL"TUBSUFE
    5BTL#TUBSUFE
    5BTL$TUBSUFE
    5BTL$pOJTIFE
    5BTL"pOJTIFE
    5BTL#pOJTIFE
    <5BTL"TFD 5BTL#TFD 5BTL$TFD>
    QSPDFTTUJNF
    */'0(&5)5510,
    'BTU"1*"TZOD#BTFE$PEF0VUQVU
    5BTL"TUBSUFE
    5BTL#TUBSUFE
    5BTL$TUBSUFE
    5BTL"pOJTIFE
    5BTL$pOJTIFE
    5BTL#pOJTIFE
    <5BTL"TFD 5BTL#TFD 5BTL$TFD>
    QSPDFTTUJNF
    */'0(&5)5510,
    5BTL"TUBSUFE
    5BTL#TUBSUFE
    5BTL$TUBSUFE
    5BTL"pOJTIFE
    5BTL$pOJTIFE
    5BTL#pOJTIFE
    <5BTL"TFD 5BTL#TFD 5BTL$TFD>
    QSPDFTTUJNF
    */'0(&5)5510,
    5BTL$pOJTIFE
    5BTL"TUBSUFE
    5BTL#TUBSUFE
    5BTL$TUBSUFE
    5BTL#pOJTIFE
    5BTL"pOJTIFE
    <5BTL"TFD 5BTL#TFD 5BTL$TFD>
    QSPDFTTUJNF
    */'0(&5)5510,
    5BTL"pOJTIFE
    5BTL$pOJTIFE
    5BTL"TUBSUFE
    5BTL#TUBSUFE
    5BTL$TUBSUFE
    5BTL#pOJTIFE
    <5BTL"TFD 5BTL#TFD 5BTL$TFD>
    QSPDFTTUJNF
    ʜ
    ʜ

    View Slide

  22. @JesseTetsuya
    Performance test is very difficult only by just comparing
    frameworks…
    - web server (nginx/apache)
    - interfaces (WSGI/ASGI)
    - application server (uwsgi, gunicorn, uvicorn)
    - libraries (asyncio(explicit) / gevent(implicit))
    - application code(sync / async)
    - language (CPython, Cython…)
    - architecture from tier one to tier three…
    - private cloud services(AWS/GCP/Azure…)
    2. Performance(Speed and Stability)

    View Slide

  23. 'MBTL VXTHJ
    'BTU"1* VWJDPSO

    4QFFE
    4UBCJMJUZ
    3FRVFTUT
    %VSBUJPOT T
    T
    -BUFODJFTNT
    T T T T T T
    #ZUFT*O
    #ZUFT0VU
    4VDDFTT
    4UBUVT$PEFT
    &SSPS4FU
    3FRVFTUT
    %VSBUJPOT T
    NT
    -BUFODJFTNT
    NT NT NT NT NT
    NT
    #ZUFT*O
    #ZUFT0VU
    4VDDFTT
    4UBUVT$PEFT
    &SSPS4FU
    @JesseTetsuya
    2. Performance(Speed and Stability)

    View Slide

  24. Answers
    1. Variety of Functions / Extension /
    Tools
    2. Performance(Speed and Stability) of
    sync and async
    3. Flexibility of REST API Architecture
    4. Learning Cost
    @JesseTetsuya

    View Slide

  25. 'MBTL 'BTU"1*
    4DBMBCJMJUZGSPNTNBMMUP
    CJHUFBNT
    &BTZUPNPEVMBSJ[FUIFDPEF
    /PSFBEZNBEFQSPKFDUTUSVDUVSF
    &BTZUPNPEVMBSJ[FUIFDPEF
    /PSFBEZNBEFQSPKFDUTUSVDUVSF
    %JSFDUPSZ5FNQMBUF
    /VNCFST
    *OEFYTFBSDISFTVMUT RVFSZ
    TJUFTJUFHJUIVCDPNDPPLJFDVUUFS
    qBTL

    *OEFYTFBSDISFTVMUT RVFSZ
    TJUFTJUFHJUIVCDPNDPPLJFDVUUFSGBTUBQJ

    @JesseTetsuya
    3. Flexibility of REST API Architecture
    1BUUFSOTGPS'MBTLIUUQTqBTLQBMMFUTQSPKFDUTDPNFOYQBUUFSOTJOEFYIUNM
    #JHHFS"QQMJDBUJPOT.VMUJQMF'JMFTIUUQTGBTUBQJUJBOHPMPDPNUVUPSJBMCJHHFSBQQMJDBUJPOT

    View Slide

  26. @JesseTetsuya
    3. Flexibility of REST API Architecture

    ᵓᴷᴷ%PDLFSpMF
    ᵓᴷᴷ3&"%.&NE
    ᵓᴷᴷBQJ
    ᴹᵓᴷᴷ@@[email protected]@QZ
    ᴹᵓᴷᴷDPOpH
    ᴹᴹᵓᴷᴷ@@[email protected]@QZ
    ᴹᴹᵋᴷᴷCBTFQZ
    ᴹᵋᴷᴷVSMT
    ᴹᵓᴷᴷ@@[email protected]@QZ
    ᴹᵓᴷᴷFOEQPJOUQZ
    ᴹᵋᴷᴷFOEQPJOUQZ
    ᵓᴷᴷEPDLFSDPNQPTFZBNM
    ᵓᴷᴷNPEFMT
    ᴹᵋᴷᴷNPEFMTQZ
    ᵓᴷᴷSFRVJSFNFOUTUYU
    ᵓᴷᴷSVOQZ
    ᵓᴷᴷUFTUT
    ᵋᴷᴷWFOW

    ᵓᴷᴷ%PDLFSpMF
    ᵓᴷᴷ3&"%.&NE
    ᵓᴷᴷBQJT
    ᴹᵓᴷᴷ@@[email protected]@QZ
    ᴹᵓᴷᴷDPOpH
    ᴹᴹᵓᴷᴷ@@[email protected]@QZ
    ᴹᴹᵓᴷᴷCBTFQZ
    ᴹᴹᵓᴷᴷTUBHJOHQZ
    ᴹᴹᵓᴷᴷQSPEVDUJPOQZ
    ᴹᴹᵋᴷᴷMPDBMQZ
    ᴹᵓᴷᴷW
    ᴹᴹᵓᴷᴷ@@[email protected]@QZ
    ᴹᴹᵓᴷᴷFOEQPJOUQZ
    ᴹᴹᵋᴷᴷFOEQPJOUQZ
    ᴹᵋᴷᴷW
    ᴹᵓᴷᴷ@@[email protected]@QZ
    ᴹᵓᴷᴷFOEQPJOUQZ
    ᴹᵋᴷᴷFOEQPJOUQZ
    ᵓᴷᴷEPDLFSDPNQPTFZBNM
    ᵓᴷᴷSFRVJSFNFOUTUYU
    ᵓᴷᴷNPEFMT
    ᴹᵋᴷᴷNPEFMTQZ
    ᵓᴷᴷUFTUT
    ᵋᴷᴷSVOQZ
    'MBTLEJSFDUPSZGPSBTNBMMUFBN
    JOBOJOUFSOBM"1*EFWFMPQNFOU
    'MBTLEJSFDUPSZGPSBCJHUFBN
    JOBOJOUFSOBM"1*EFWFMPQNFOU

    View Slide

  27. @JesseTetsuya
    3. Flexibility of REST API Architecture

    ᵓᴷᴷ%PDLFSpMF
    ᵓᴷᴷ3&"%.&NE
    ᵓᴷᴷBQJQZ
    ᵓᴷᴷVSMT
    ᴹᵓᴷᴷ@@[email protected]@QZ
    ᴹᵓᴷᴷFOEQPJOUQZ
    ᴹᵓᴷᴷFOEQPJOUQZ
    ᴹᵋᴷᴷSPVUFSQZ
    ᵓᴷᴷEC
    ᴹᵓᴷᴷ@@[email protected]@QZ
    ᴹᵓᴷᴷNPEFMTQZ
    ᴹᵓᴷᴷTDIFNBTQZ
    ᴹᵋᴷᴷEBUBCBTFQZ
    ᵓᴷᴷEPDLFSDPNQPTFZBNM
    ᵓᴷᴷUFTUT
    ᵋᴷᴷWFOW

    ᵓᴷᴷ%PDLFSpMF
    ᵓᴷᴷ3&"%.&NE
    ᵓᴷᴷBQJTQZ
    ᵓᴷᴷW
    ᴹᵓᴷᴷ@@[email protected]@QZ
    ᴹᵓᴷᴷFOEQPJOUQZ
    ᴹᵋᴷᴷSPVUFSQZ
    ᵓᴷᴷW
    ᴹᵓᴷᴷ@@[email protected]@QZ
    ᴹᵓᴷᴷFOEQPJOUQZ
    ᴹᵋᴷᴷSPVUFSQZ
    ᵓᴷᴷEC
    ᴹᵓᴷᴷ@@[email protected]@QZ
    ᴹᵓᴷᴷNPEFMTQZ
    ᴹᵓᴷᴷTDIFNBTQZ
    ᴹᵋᴷᴷEBUBCBTFQZ
    ᵓᴷᴷEPDLFSDPNQPTFZBNM
    ᵓᴷᴷUFTUT
    ᵋᴷᴷWFOW
    'BTU"1*EJSFDUPSZGPSBTNBMMUFBN
    JOBOJOUFSOBM"1*EFWFMPQNFOU
    'BTU"1*EJSFDUPSZGPSBCJHUFBN
    JOBOJOUFSOBM"1*EFWFMPQNFOU

    View Slide

  28. 'MBTL 'BTU"1*
    4DBMBCJMJUZGSPNTNBMM
    UPCJHUFBNT
    &BTZUPNPEVMBSJ[FUIFDPEF
    /PSFBEZNBEFQSPKFDUTUSVDUVSF
    MJLF%KBOHP
    &BTZUPNPEVMBSJ[FUIFDPEF
    /PSFBEZNBEFQSPKFDUTUSVDUVSFMJLF
    %KBOHP
    %JSFDUPSZ5FNQMBUF
    /VNCFST
    *OEFYTFBSDISFTVMUT
    RVFSZTJUFTJUFHJUIVCDPN
    DPPLJFDVUUFSqBTL

    *OEFYTFBSDISFTVMUT RVFSZ
    TJUFTJUFHJUIVCDPNDPPLJFDVUUFS
    GBTUBQJ

    @JesseTetsuya
    3. Flexibility of REST API Architecture

    View Slide

  29. Answers
    1. Variety of functions and extension
    2. Performance(Speed and Stability)
    3. Flexibility of REST API Architecture
    4. Learning Cost
    @JesseTetsuya

    View Slide

  30. 'MBTL 'BTU"1*
    %J⒏DVMUZUPXSJUF
    DPEF
    $PEJOHHSBNNBSJTTJNQMFBOETJNJMBS
    XJUI'BTU"1*
    $PEJOHHSBNNBSJTTJNQMFBOETJNJMBS
    XJUI'MBTL
    .645LOPXUIFUFSNJOPMPHZBSPVOE
    BTZODBOECFGBNJMJBSXJUI"4(*
    %J⒏DVMUZUPLOPX
    IPXUPXSJUFDPEF
    *OEFY4FBSDI<> SFTVMUT
    l'MBTLz"/%"1*TIPSUVSMBULW#&+

    .PWJFT<> SFTVMUT l'MBTLz"/%
    l"1*TIPSUVSMBUU,/7

    #PPLT<> SFTVMUT l'MBTLz"/%
    l"1*TIPSUVSMBU,28

    "NB[PO +1&OH
    <>
    *OEFY4FBSDI<> SFTVMUT l'BTU"1*
    "/%"1*TIPSUVSMBUHIMY

    .PWJFT<> SFTVMUT l'BTU"1*z"/%l"1*
    TIPSUVSMBUU,/7

    #PPLT<> SFTVMUT l'BTU"1*z"/%l"1*
    TIPSUVSMBUIQ%25

    "NB[PO +1&OH
    <>
    @JesseTetsuya
    4. Learning Cost
    <>(PPHMF4FBSDI
    <>'MBTL +1
    IUUQTXXXBNB[PODPKQT L'[email protected]@OPTT
    <>'MBTL FOH
    IUUQTXXXBNB[PODPNT L'[email protected]@[email protected]
    <>'BTU"1* +1
    IUUQTXXXBNB[PODPKQT L'BTU"1*[email protected]@[email protected]
    <>'BTU"1* FOH
    IUUQTXXXBNB[PODPNT L'BTU"1*[email protected]@[email protected]

    View Slide

  31. @JesseTetsuya
    OFF TOPIC
    Learning Strategies
    1. Recognize what you do not know and categorize the type of knowledge:
    Capture the whole picture by reviewing movies, personally recommend python
    conference archives.
    2. Acquire Declarative Knowledge:
    Google ambiguous terms, link word with meaning, and make relations between a
    term and a term. Indexes in this previous slides can be useful.
    3. Acquire Procedural Knowledge:
    Focus on writing the code and develop a small application based on tutorial
    materials or primers.

    View Slide

  32. @JesseTetsuya
    4. Learning Cost
    Learning materials for engineers without Async experience
    1. Miguel Grinberg Asynchronous Python for the Complete
    Beginner PyCon 2017
    (https://youtu.be/iG6fr81xHKA)
    2. An introduction to ASGI, Asynchronous Server Gateway Interface
    - Philip Jones - PyLondinium19(https://youtu.be/t3gCK9QqXWU)
    3. asyncio — Asynchronous I/O (https://docs.python.org/3/library/
    asyncio.html)

    View Slide

  33. @JesseTetsuya
    4. Learning Cost
    Learning materials for engineers without FastAPI experience
    1. Modern Python through FastAPI and friends. Sebastián Ramírez.
    (https://youtu.be/37CcB2GBdlY)
    2. Tutorial - User Guide - Intro
    (https://fastapi.tiangolo.com/tutorial/#tutorial-user-guide-intro)
    3. Talks # 8: Sebastián Ramírez; Build a machine learning API from
    scratch with FastAPI
    (https://youtu.be/1zMQBe0l1bM)

    View Slide

  34. @JesseTetsuya
    4. Learning Cost
    Learning materials for engineers without Flask experience
    1. Armin Ronacher, "Flask for Fun and Profit", PyBay2016
    (https://youtu.be/1ByQhAM5c1I)
    2. CS50 2020 - Lecture 9 - Flask, Harvard University's introduction to
    the intellectual enterprises of computer science and the art of
    programming. (https://www.youtube.com/watch?v=x_c8pTW8ZUc)
    3. Tutorial:
    (https://flask.palletsprojects.com/en/2.0.x/tutorial/index.html)

    View Slide

  35. 'MBTL 'BTU"1*
    %J⒏DVMUZUPXSJUF
    DPEF
    $PEJOHHSBNNBSJTTJNQMFBOE
    TJNJMBSXJUI'BTU"1*
    $PEJOHHSBNNBSJTTJNQMFBOE
    TJNJMBSXJUI'MBTL
    .645LOPXJEJPNTBSPVOEBTZOD
    BOECFGBNJMJBSXJUI"4(*
    %J⒏DVMUZUPLOPX
    IPXUPXSJUFDPEF
    *OEFY4FBSDI<> SFTVMUT l'MBTLz
    "/%"1*TIPSUVSMBULW#&+

    .PWJFT<> SFTVMUT l'MBTLz"/%l"1*
    TIPSUVSMBUU,/7

    #PPLT<> SFTVMUT l'MBTLz"/%l"1*TIPSUVSMBU
    ,28

    "NB[PO +1&OH
    <>
    *OEFY4FBSDI<> SFTVMUT l'BTU"1*"/%
    "1*TIPSUVSMBUHIMY

    .PWJFT<> SFTVMUT l'BTU"1*z"/%l"1*TIPSUVSMBU
    U,/7

    #PPLT<> SFTVMUT l'BTU"1*z"/%l"1*TIPSUVSMBU
    IQ%25

    "NB[PO +1&OH
    <>
    @JesseTetsuya
    4. Learning Cost
    <>(PPHMF4FBSDI
    <>'MBTL +1
    IUUQTXXXBNB[PODPKQT L'[email protected]@OPTT
    <>'MBTL FOH
    IUUQTXXXBNB[PODPNT L'MBTLJTUSJQCPPLTJOUMT[email protected]@[email protected]
    <>'BTU"1* +1
    IUUQTXXXBNB[PODPKQT L'BTU"1*[email protected]@[email protected]
    <>'BTU"1* FOH
    IUUQTXXXBNB[PODPNT L'BTU"1*[email protected]@[email protected]

    View Slide

  36. 'MBTL 'BTU"1*
    7BSJFUZ ˓ ˚
    1FSGPSNBODF ˚ ˓
    'MFYJCJMJUZ
    -FBSOJOH$PTU ˓ ˚
    Summary
    @JesseTetsuya

    View Slide

  37. @JesseTetsuya
    The Future
    - ASGI is not PEP yet.
    - There are still many unknown practices of architecture
    patterns including anti-patterns. The amount of experiences
    and practices can influence framework selection.
    - Japanese books of Flask and FastAPI are very rare for us to
    find them in bookstore. This influences the number of
    learners and the community size.

    View Slide

  38. Tetsuya (Jesse) Hirata
    @JesseTetsuya
    ————————————————————————————————————————————————————————————————————————————————
    Software Engineer at an EdTech company based in Tokyo.
    I mostly work in both data science and engineering.
    If you have an interest in the
    EdTech domain or in what our
    team is doing, reach out to me !!

    View Slide