iT邦幫忙

2025 iThome 鐵人賽

DAY 15
0
Software Development

每天一點 Ktor 3.0:一個月學會 Kotlin 後端開發系列 第 15

Day 15:Ktor 和 Python 作為後端開發的特點比較

  • 分享至 

  • xImage
  •  

前面講過了和 golang 的比較,今天來講講和 Python 進行後端開發的比較

Python

Python 作為一個知名度非常高的程式語言,也有許多人嘗試用 Python 來進行後端開發。

不過作為一個直譯式語言,我個人在語言選擇時,總是覺得很難得遇到首選是 Python 的場景。

因為,作為一個功能比較泛用的直譯式語言,當我今天需要快速開發時,我會優先想到使用專門針對網頁開發的 PHP。

在面對剛開始學習程式語言的新人時,我也可以避免掉對新人來說最棘手的環境建置問題,特別是使用哪個套件管理系統,或者使用哪個版本的 Python。

當我今天需要效能時,考慮到編譯式語言的效能通常比較好,我會往編譯式語言,像是 Kotlin 去思考。

所以,除非今天遇到的是人員能力的需求,比方說多數同事都已經會 Python。我覺得在哪個狀況,Python 都會是一個非首選的選項。

Django

如果今天想開發比較完整的後端需求,Python 內蠻多人會選擇使用 Django

Django 作為一個完整的框架,有內建的 ORM 結構

使用方式上,由於有類別的概念,我們可以用 class 來定義資料結構,並且使用 ManyToManyField 進行定義

from django.db import models

class Course(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name


class Student(models.Model):
    name = models.CharField(max_length=100)
    # 多對多關係
    courses = models.ManyToManyField(Course, related_name="students")

    def __str__(self):
        return self.name

使用方式如下

math = Course.objects.create(name="數學")
english = Course.objects.create(name="英文")
alice = Student.objects.create(name="Alice")
bob = Student.objects.create(name="Bob")

# 設定多對多關聯
alice.courses.add(math, english)  # Alice 選了數學和英文
bob.courses.add(math)             # Bob 選了數學

我認為在各種後端語言相比,語法算是非常簡潔,並且將資料庫存取包裝得很好了。

FastAPI

作為快速開發,FastAPI 也是很多人的首選,撰寫起來也非常直觀

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello, FastAPI!"}

不過由於 FastAPI 是一個輕量框架,剛好沒有內建 ORM

所以如果服務要串聯資料庫,通常會需要搭配其他的 ORM 框架進行開發,像是 SQLAlchemy

SQLAlchemy 的語法就比較複雜一點了

from sqlalchemy import Table, Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, DeclarativeBase

class Base(DeclarativeBase):
    pass

# 中介表 (association table)
user_course = Table(
    "user_course",
    Base.metadata,
    Column("user_id", ForeignKey("users.id"), primary_key=True),
    Column("course_id", ForeignKey("courses.id"), primary_key=True),
)

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, unique=True, index=True)

    courses = relationship(
        "Course",
        secondary=user_course,
        back_populates="users"
    )

class Course(Base):
    __tablename__ = "courses"

    id = Column(Integer, primary_key=True, index=True)
    title = Column(String, unique=True, index=True)

    users = relationship(
        "User",
        secondary=user_course,
        back_populates="courses"
    )

資料分析需求

之前和其他人的討論中,有討論到如果同時有後端需求以及資料分析需求,由於資料分析的部分很常使用 Python 進行開發,那麼使用 Python 就會比較合理。

不過在這種場景之下,我會使用資料庫作為中介,在語言的選項具備彈性的同時,也不會讓系統變得複雜。

具體說就是,後端的部分繼續使用喜歡的語言,像是 PHP 開發。然後 Python 撰寫獨立的服務,讀取資料庫的內容進行分析。

這樣,既不用將後端服務和資料分析服務撰寫再一起,也可以同時善用兩個語言的優勢

今天的部分就說到這邊,我們明天見!


上一篇
Day 14:Ktor 和 Golang 進行後端開發的比較
下一篇
Day 16:Kotlin 和 Java 比較:Spring boot 篇
系列文
每天一點 Ktor 3.0:一個月學會 Kotlin 後端開發20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言