Hướng dẫn is python good for creating apis? - python có tốt để tạo apis không?

Là một nhà khoa học dữ liệu hoặc kỹ sư dữ liệu, nhiều lần chúng tôi phải chia sẻ công việc của mình để bất kỳ ai khác trong công ty có thể sử dụng các quy trình hoặc mô hình mà chúng tôi đã tạo. Rõ ràng, chia sẻ một kịch bản không phải là một lựa chọn, vì mọi người sẽ cần phải có những chương trình tương tự như bạn. Đây là khi API đi vào chơi. Ngày nay, chúng ta sẽ thấy chúng là gì và làm thế nào để tạo API trong Python. Nghe có vẻ thú vị? Vâng, hãy để Lừa nhận được nó!

API cơ bản

API (giao diện lập trình ứng dụng) cho phép hai hệ thống máy tính tương tác với nhau. Ví dụ: nếu chúng ta tạo một tự động hóa tạo báo cáo và gửi nó qua email, việc gửi email đó không được thực hiện thủ công, bản thân tập lệnh sẽ làm điều đó. Để làm điều này, Python (hoặc ngôn ngữ chúng tôi sử dụng), phải yêu cầu Gmail gửi email đó, với báo cáo đó được đính kèm cho một số người nhất định. Cách để làm điều đó là thông qua API, trong trường hợp này là API Gmail.

OK, bây giờ bạn đã biết API là gì, hãy để xem các phần chính của API là gì:

  • Giao thức chuyển giao HTTP: Đây là cách chính để truyền đạt thông tin trên web. Có các phương pháp khác nhau, mỗi phương pháp được sử dụng cho các vấn đề khác nhau:: it is the main way of communicating information on the web. There are different methods, each of them used for different issues:
    • Nhận: Phương pháp này cho phép lấy thông tin từ cơ sở dữ liệu hoặc từ một quy trình.: this method allows obtaining information from the database or from a process.
    • Bài đăng: Cho phép bạn gửi thông tin, ví dụ để thêm thông tin vào cơ sở dữ liệu hoặc chuyển đầu vào của mô hình học máy.: allows you to send information, either to add information to a database or to pass the input of a machine learning model, for example.
    • Đặt: Cập nhật thông tin. Nó thường được sử dụng để quản lý thông tin trong cơ sở dữ liệu. update information. It is generally used to manage information in the database.
    • Xóa: Phương pháp này được sử dụng để xóa thông tin khỏi cơ sở dữ liệu.: this method is used to delete information from the database.
  • URL: là địa chỉ mà chúng ta có thể tìm thấy API của mình. Về cơ bản, URL này sẽ bao gồm ba phần:: is the address where we can find our API. Basically this URL will consist of three parts:
    • Giao thức: Giống như bất kỳ địa chỉ nào, nó có thể là
      from fastapi import FastAPI
      app =from fastapi import FastAPI
      app = FastAPI()
      
      @app.get("/my-first-api")
      def hello(name: str):
        return {'Hello ' + name + '!'} 
      5 hoặc
      from fastapi import FastAPI
      app =from fastapi import FastAPI
      app = FastAPI()
      
      @app.get("/my-first-api")
      def hello(name: str):
        return {'Hello ' + name + '!'} 
      6.
      : like any address, it can be
      from fastapi import FastAPI
      app =from fastapi import FastAPI
      app = FastAPI()
      
      @app.get("/my-first-api")
      def hello(name: str):
        return {'Hello ' + name + '!'} 
      5 or
      from fastapi import FastAPI
      app =from fastapi import FastAPI
      app = FastAPI()
      
      @app.get("/my-first-api")
      def hello(name: str):
        return {'Hello ' + name + '!'} 
      6.
    • Tên miền: Máy chủ mà nó được lưu trữ, đi từ giao thức đến cuối .com, hoặc bất kỳ kết thúc URL nào. Trên trang web của tôi, ví dụ, tên miền là
      from fastapi import FastAPI
      app =from fastapi import FastAPI
      app = FastAPI()
      
      @app.get("/my-first-api")
      def hello(name: str):
        return {'Hello ' + name + '!'} 
      7.
      : the host on which it is hosted, which goes from the protocol to the end of .com, or whatever ending the url has. On my website, for example, the domain is
      from fastapi import FastAPI
      app =from fastapi import FastAPI
      app = FastAPI()
      
      @app.get("/my-first-api")
      def hello(name: str):
        return {'Hello ' + name + '!'} 
      7.
    • Điểm cuối: Giống như một trang web có một số trang (/ blog), (/ pháp lý), cùng một API có thể bao gồm nhiều điểm và mỗi trang làm những việc khác nhau. Khi tạo API của chúng tôi trong Python, chúng tôi sẽ chỉ ra các điểm cuối, vì vậy chúng tôi phải đảm bảo rằng mỗi điểm riêng là đại diện cho những gì API đằng sau nó làm.: like a website has several pages (/ blog), (/ legal), the same API can include multiple points and each one does different things. When creating our API in Python we will indicate the endpoints, so we must make sure that each enpoint is representative of what the API behind it does.

OK, bây giờ chúng ta biết API là gì và các phần chính của nó là gì, hãy để xem cách chúng ta có thể tạo API trong Python. Chúng ta hãy đi đến đó!

Cách tạo API trong Python

Có nhiều cách khác nhau để tạo API trong Python, được sử dụng nhiều nhất là fastapi và bình. Vì vậy, tôi sẽ giải thích làm thế nào cả hai hoạt động, để bạn có thể sử dụng cách tạo API trong Python mà bạn thích nhất. Hãy bắt đầu với Fastapi.

Cách tạo API trong Python với Fastapi

Yêu cầu sử dụng fastapi

Fastapi là một cách tạo API trong Python xuất hiện vào cuối năm 2018. Nó rất nhanh, mặc dù nó chỉ có thể được sử dụng với Python 3.6+ (theo tôi, điều này không phải là vấn đề, nhưng nó rất quan trọng).

Để sử dụng nó, bạn phải cài đặt hai thư viện:

from fastapi import FastAPI
app =from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello(name: str):
  return {'Hello ' + name + '!'} 
8 và
from fastapi import FastAPI
app =from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello(name: str):
  return {'Hello ' + name + '!'} 
9.

pip install fastapi
pip install uvicorn

API Python đầu tiên của bạn với Fastapi

Bây giờ chúng tôi đã cài đặt các gói, chúng tôi chỉ cần tạo một tệp trong Python nơi chúng tôi sẽ xác định API của chúng tôi. Trong tệp này, chúng tôi phải tạo một ứng dụng, nơi chúng tôi sẽ bao gồm các API, với các điểm cuối, tham số, v.v.

Khi chúng tôi có ứng dụng, đó là nơi mà chúng tôi xác định thông tin mà API yêu cầu: điểm cuối, phương thức HTTP, đối số đầu vào và API sẽ làm gì đằng sau nó.

from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello():
  return {"Hello world!"}

Với điều này, chúng tôi đã có một API rất đơn giản được tạo ra, chỉ đơn giản là trả về thế giới Hello Hello! Như bạn sẽ thấy, trong một vài dòng chúng tôi đã xác định: phương thức (GET), điểm cuối (Hồi/) và hàm mà API này sẽ chạy.

Chúng tôi thậm chí có thể chuyển các đối số cho API của chúng tôi, để nó sử dụng trong chức năng của nó. Bất cứ khi nào chúng tôi chuyển một đối số cho chức năng của chúng tôi, chúng tôi phải chỉ ra loại dữ liệu mà nó phải là (số, văn bản, v.v.).

Quan trọng: Fastapi thực hiện kiểm tra xem loại dữ liệu mà chúng tôi chuyển cho nó trong cuộc gọi là những gì chúng tôi đã chỉ ra nó nên được. Điều này rất cần thiết để đảm bảo rằng API của chúng tôi hoạt động đúng và đó là điều mà các khung tạo API khác (như bình) không bao gồm.: FastAPI performs a check that the type of data that we pass to it in the call is what we have indicated it should be. This is essential to ensure that our API works properly, and it is something that other API creation frameworks (like Flask) do not include.

Hãy để xem cách nó hoạt động trong một ví dụ:

from fastapi import FastAPI
app =from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello(name: str):
  return {'Hello ' + name + '!'} 

Bây giờ, khi chúng tôi thực hiện yêu cầu cho API này, chúng tôi sẽ phải chuyển tham số tên cho nó để nó hoạt động. Đó là, nếu trước đây nó là đủ để chúng ta đến

from fastapi import FastAPI

app = FastAPI()

@app.get("/my-first-api")
def hello(name = None):

    if name is None:
        text = 'Hello!'

    else:
        text = 'Hello ' + name + '!'

    return text
0, bây giờ chúng ta sẽ phải vượt qua tham số
from fastapi import FastAPI

app = FastAPI()

@app.get("/my-first-api")
def hello(name = None):

    if name is None:
        text = 'Hello!'

    else:
        text = 'Hello ' + name + '!'

    return text
1. Do đó, yêu cầu sẽ trông như sau:
from fastapi import FastAPI

app = FastAPI()

@app.get("/my-first-api")
def hello(name = None):

    if name is None:
        text = 'Hello!'

    else:
        text = 'Hello ' + name + '!'

    return text
2.

Vì chúng tôi đã bao gồm đối số

from fastapi import FastAPI

app = FastAPI()

@app.get("/my-first-api")
def hello(name = None):

    if name is None:
        text = 'Hello!'

    else:
        text = 'Hello ' + name + '!'

    return text
1, đối số này là bắt buộc: nếu nó không được bao gồm trong yêu cầu, nó sẽ không hoạt động. Tuy nhiên, chúng tôi có thể muốn vượt qua các đối số tùy chọn.

Đối với điều này, chúng ta phải chỉ ra đối số là

from fastapi import FastAPI

app = FastAPI()

@app.get("/my-first-api")
def hello(name = None):

    if name is None:
        text = 'Hello!'

    else:
        text = 'Hello ' + name + '!'

    return text
4 và Fastapi sẽ giải thích nó đúng. Ví dụ: Chúng tôi sẽ tạo một API mà bạn có thể truyền, hoặc không, biến
from fastapi import FastAPI

app = FastAPI()

@app.get("/my-first-api")
def hello(name = None):

    if name is None:
        text = 'Hello!'

    else:
        text = 'Hello ' + name + '!'

    return text
1. Nếu bạn vượt qua nó, nó sẽ trả về “Xin chào {name}!” Và, nếu không, chỉ đơn giản là xin chào!

from fastapi import FastAPI

app = FastAPI()

@app.get("/my-first-api")
def hello(name = None):

    if name is None:
        text = 'Hello!'

    else:
        text = 'Hello ' + name + '!'

    return text

Trong trường hợp này, nếu chúng ta truy cập

from fastapi import FastAPI

app = FastAPI()

@app.get("/my-first-api")
def hello(name = None):

    if name is None:
        text = 'Hello!'

    else:
        text = 'Hello ' + name + '!'

    return text
0, API sẽ được thực thi chính xác và nó sẽ trả về Hello Hello! .

Trả về các loại dữ liệu khác nhau với fastapi

Phần lớn số lần API thường trả về văn bản (dự đoán, dữ liệu, v.v.), mặc dù nhiều lần nó có thể trả về các loại dữ liệu khác, chẳng hạn như DataFrame hoặc một hình ảnh, chẳng hạn.

Khi nói đến các đối tượng bình thường, như DataFrame, Fastapi sẽ chuyển đổi trực tiếp thành tệp JSON. Thí dụ:

from fastapi import FastAPI

app = FastAPI()

@app.get("/get-iris")
def get_iris():

    import pandas as pd
    url ='https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv'
    iris = pd.read_csv(url)

    return iris

Nếu chúng tôi yêu cầu đến điểm cuối này, chúng tôi sẽ nhận được phản hồi sau:

resp.text
'{"sepal_length":{"0":5.1,"1":4.9,"2":4.7,"3":4.6,"4":5.0,"5":5.4,"6":4.6,"7":5.0,"8":4.4,"9":4.9,"10":5.4,"11":4.8,"12":4.8,"13":4.3,"14":5.8,"15":5.7,"16":5.4,"17":5.1,"18":5.7,"19":5.1,"20":5.4,"21":5.1,"22":4.6,"23":5.1,"24":4.8,"25":5.0,"26":5.0,"27":5.2,"28":5.2,"29":4.7,"30":4.8,"31":5.4,"32":5.2,"33":5.5,"34":4.9,"35":5.0,"36":5.5,"37":4.9,"38":4.4,"39":5.1,"40":5.0,"41":4.5,"42":4.4,"43":5.0,"44":5.1,"45":4.8,"46":5.1,"47":4.6,"48":5.3,"49":5.0,"50":7.0,...

Như bạn có thể thấy, API nhanh chuyển đổi khung dữ liệu trực tiếp thành đối tượng JSON. Tuy nhiên, những gì về hình ảnh hoặc video?

Fastapi dựa trên

from fastapi import FastAPI

app = FastAPI()

@app.get("/my-first-api")
def hello(name = None):

    if name is None:
        text = 'Hello!'

    else:
        text = 'Hello ' + name + '!'

    return text
9, vì vậy để trả lời bằng hình ảnh hoặc biểu tượng, chúng ta có thể sử dụng cả
from fastapi import FastAPI

app = FastAPI()

@app.get("/get-iris")
def get_iris():

    import pandas as pd
    url ='https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv'
    iris = pd.read_csv(url)

    return iris
0 và
from fastapi import FastAPI

app = FastAPI()

@app.get("/get-iris")
def get_iris():

    import pandas as pd
    url ='https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv'
    iris = pd.read_csv(url)

    return iris
1. Trong mọi trường hợp, chúng tôi sẽ cần cài đặt
from fastapi import FastAPI

app = FastAPI()

@app.get("/get-iris")
def get_iris():

    import pandas as pd
    url ='https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv'
    iris = pd.read_csv(url)

    return iris
2.

Vì vậy, nếu chúng tôi muốn hiển thị một hình ảnh trong API của chúng tôi, ứng dụng Fastapi của chúng tôi sẽ trông như thế này:

@app.get("/plot-iris")
def plot_iris():

    import pandas as pd
    import matplotlib.pyplot as plt

    url ='https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv'
    iris = pd.read_csv(url)

    plt.scatter(iris['sepal_length'], iris['sepal_width'])
    plt.savefig('iris.png')
    file = open('iris.png', mode="rb")

    return StreamingResponse(file, media_type="image/png")

Như chúng ta có thể thấy, việc tạo API trong Python với Fastapi rất đơn giản và rất linh hoạt. Nhưng làm thế nào tôi có thể kiểm tra xem API của tôi có hoạt động tốt không? Hãy để xem nó!

Kiểm tra hoạt động của API Fastapi

Như tôi đã nói ở đầu phần này, để tạo API trong Fastapi, chúng tôi phải đưa mã của chúng tôi vào tệp Python, tốt nhất là

from fastapi import FastAPI

app = FastAPI()

@app.get("/get-iris")
def get_iris():

    import pandas as pd
    url ='https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv'
    iris = pd.read_csv(url)

    return iris
3. Ngoài ra, chúng ta phải cài đặt
from fastapi import FastAPI

app = FastAPI()

@app.get("/get-iris")
def get_iris():

    import pandas as pd
    url ='https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv'
    iris = pd.read_csv(url)

    return iris
4. Đưa ra tài khoản này, chúng ta có thể chạy API của mình một cách rất đơn giản, với mã sau:

uvicorn main:app --reload

Điều này sẽ chạy ứng dụng của chúng tôi và chúng tôi sẽ có thể truy cập API của chúng tôi, cả ở cấp độ trình duyệt và bằng cách thực hiện các cuộc gọi từ máy tính của chúng tôi. API chưa được tải lên ở bất cứ đâu, vì vậy nó sẽ có thể truy cập được từ localhost. Bạn có thể truy cập localhost cả trong

from fastapi import FastAPI

app = FastAPI()

@app.get("/get-iris")
def get_iris():

    import pandas as pd
    url ='https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv'
    iris = pd.read_csv(url)

    return iris
5 và trong
from fastapi import FastAPI

app = FastAPI()

@app.get("/get-iris")
def get_iris():

    import pandas as pd
    url ='https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv'
    iris = pd.read_csv(url)

    return iris
6, mặc dù bạn sẽ phải thực hiện nó trong cùng một cổng đang chạy API. Để tìm hiểu, theo tôi, điều dễ nhất là sử dụng liên kết mà
from fastapi import FastAPI

app = FastAPI()

@app.get("/get-iris")
def get_iris():

    import pandas as pd
    url ='https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv'
    iris = pd.read_csv(url)

    return iris
4 sẽ cung cấp cho bạn khi thực hiện API:

Hướng dẫn is python good for creating apis? - python có tốt để tạo apis không?

Ví dụ, hãy xem cách tôi yêu cầu API bao gồm tất cả các điểm cuối mà tôi đã giải thích trước đây.

import requests
from PIL import Image
import io

resp = requests.get('http://127.0.0.1:8000/plot-iris')
file = io.BytesIO(resp.content)
im = Image.open(file)
im.show()

Hướng dẫn is python good for creating apis? - python có tốt để tạo apis không?

Như chúng ta có thể thấy, API của chúng tôi đang trả lại hình ảnh cho chúng tôi một cách chính xác. Bây giờ, hãy thử điểm cuối đầu tiên mà chúng tôi đã tạo:

from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello():
  return {"Hello world!"}
0
from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello():
  return {"Hello world!"}
1

Ngoài ra, chính Fastapi tạo ra tài liệu trong Swagger, mà chúng ta có thể truy cập từ đường dẫn, tài liệu. Trong trường hợp của tôi, khi API được phơi bày, tôi có thể truy cập

from fastapi import FastAPI

app = FastAPI()

@app.get("/get-iris")
def get_iris():

    import pandas as pd
    url ='https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv'
    iris = pd.read_csv(url)

    return iris
8, như đã thấy trong hình ảnh sau:

Hướng dẫn is python good for creating apis? - python có tốt để tạo apis không?

Bên cạnh đó, cũng có một cách khác để ghi lại API, với OpenAPI, có thể truy cập được thông qua điểm cuối

from fastapi import FastAPI

app = FastAPI()

@app.get("/get-iris")
def get_iris():

    import pandas as pd
    url ='https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv'
    iris = pd.read_csv(url)

    return iris
9, như chúng ta thấy dưới đây:

Hướng dẫn is python good for creating apis? - python có tốt để tạo apis không?

Như bạn có thể thấy, việc tạo API với Fastapi rất đơn giản, rất nhanh và trực quan. Tuy nhiên, Fastapi không phải là cách duy nhất để tạo API trong Python. Một cách khác để làm điều đó là bằng cách sử dụng

resp.text
0. Hãy để xem cách nó hoạt động!

Cách tạo API trong Python bằng bình

Cách tạo API bằng bình

Trước hết, để tạo API trong Python bằng bình, chúng tôi phải cài đặt các gói

resp.text
0 và
resp.text
2. Khi chúng tôi đã cài đặt các thư viện, chúng tôi phải tạo máy chủ của mình, như chúng tôi đã làm với Fastapi. Chúng ta có thể làm điều này với lệnh sau:

from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello():
  return {"Hello world!"}
2

Ngoài ra, chúng tôi sẽ phải chỉ ra rằng máy chủ sẽ khởi chạy cùng với cổng nơi cần khởi chạy. Để làm điều này, vào cuối ứng dụng của chúng tôi, chúng tôi phải bao gồm mã sau:

from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello():
  return {"Hello world!"}
3

Khi chúng tôi đã tạo máy chủ của mình và chúng tôi đã chỉ ra rằng nó sẽ chạy, chúng tôi có thể bắt đầu tạo API của mình. Để tạo API trong Python bằng bình, chúng ta phải chỉ ra: điểm cuối, phương thức và hàm cần được thực thi trên điểm cuối đó. Hãy cùng xem một ví dụ với một API chỉ cần trả lại văn bản Hello Hello World!

from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello():
  return {"Hello world!"}
4

Như bạn có thể thấy, trong trường hợp này, chúng tôi xác định cả điểm cuối và phương thức khi chúng tôi xác định đường dẫn máy chủ với

resp.text
3 trong trường hợp của tôi, tôi đã xác định phương thức GET, mặc dù không cần thiết Phương pháp Get. Do đó, chỉ là bắt buộc phải xác định phương pháp nếu chúng ta sẽ sử dụng một phương pháp khác ngoài GET, nghĩa là, nếu chúng ta sử dụng một bài đăng, đặt hoặc xóa.

Cách chuyển các tham số cho API trong bình

Nhiều lần, API của chúng tôi yêu cầu tham số. Một ví dụ rõ ràng là khi chúng tôi đưa một mô hình vào sản xuất: mỗi đầu vào của mô hình phải là một tham số của API của chúng tôi.

Theo nghĩa đó, chúng ta có thể chuyển các đối số cho API của chúng ta trong bình khi đưa ra yêu cầu. Trong trường hợp này, để có thể sử dụng chúng trong chức năng, trước tiên chúng ta phải trích xuất chúng từ yêu cầu, điều mà chúng ta sẽ làm với

resp.text
4. Vâng, điều này có phần khác biệt so với cách nó được thực hiện trong Fastapi và, theo tôi, là cồng kềnh hơn trong bình so với Fastapi.

Ví dụ, hãy xem, ví dụ, cách tạo API nhận tham số tên và tạo bản in của Hello Hello {name}!

from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello():
  return {"Hello world!"}
5

Trong trường hợp này, API của chúng tôi đang lấy tham số

from fastapi import FastAPI

app = FastAPI()

@app.get("/my-first-api")
def hello(name = None):

    if name is None:
        text = 'Hello!'

    else:
        text = 'Hello ' + name + '!'

    return text
1 từ URL yêu cầu, với hai tùy chọn:

  1. Nếu tham số tên chưa được truyền, ví dụ:
    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/my-first-api")
    def hello(name = None):
    
        if name is None:
            text = 'Hello!'
    
        else:
            text = 'Hello ' + name + '!'
    
        return text
    0 tham số tên sẽ không có, vì vậy API sẽ trả về
    resp.text
    7.
  2. Nếu tham số
    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/my-first-api")
    def hello(name = None):
    
        if name is None:
            text = 'Hello!'
    
        else:
            text = 'Hello ' + name + '!'
    
        return text
    1 đã được truyền, ví dụ
    resp.text
    9, API sẽ sử dụng tham số để tạo phản hồi, trong trường hợp này sẽ là
    '{"sepal_length":{"0":5.1,"1":4.9,"2":4.7,"3":4.6,"4":5.0,"5":5.4,"6":4.6,"7":5.0,"8":4.4,"9":4.9,"10":5.4,"11":4.8,"12":4.8,"13":4.3,"14":5.8,"15":5.7,"16":5.4,"17":5.1,"18":5.7,"19":5.1,"20":5.4,"21":5.1,"22":4.6,"23":5.1,"24":4.8,"25":5.0,"26":5.0,"27":5.2,"28":5.2,"29":4.7,"30":4.8,"31":5.4,"32":5.2,"33":5.5,"34":4.9,"35":5.0,"36":5.5,"37":4.9,"38":4.4,"39":5.1,"40":5.0,"41":4.5,"42":4.4,"43":5.0,"44":5.1,"45":4.8,"46":5.1,"47":4.6,"48":5.3,"49":5.0,"50":7.0,...
    0.

Quan trọng: Bình không đưa ra đánh giá các tham số yêu cầu, vì vậy chúng tôi sẽ phải tự mình thực hiện đánh giá, nếu không nó sẽ được sử dụng trong hàm. Ví dụ: nếu chúng tôi yêu cầu URL:

'{"sepal_length":{"0":5.1,"1":4.9,"2":4.7,"3":4.6,"4":5.0,"5":5.4,"6":4.6,"7":5.0,"8":4.4,"9":4.9,"10":5.4,"11":4.8,"12":4.8,"13":4.3,"14":5.8,"15":5.7,"16":5.4,"17":5.1,"18":5.7,"19":5.1,"20":5.4,"21":5.1,"22":4.6,"23":5.1,"24":4.8,"25":5.0,"26":5.0,"27":5.2,"28":5.2,"29":4.7,"30":4.8,"31":5.4,"32":5.2,"33":5.5,"34":4.9,"35":5.0,"36":5.5,"37":4.9,"38":4.4,"39":5.1,"40":5.0,"41":4.5,"42":4.4,"43":5.0,"44":5.1,"45":4.8,"46":5.1,"47":4.6,"48":5.3,"49":5.0,"50":7.0,...
1, API sẽ trả về
'{"sepal_length":{"0":5.1,"1":4.9,"2":4.7,"3":4.6,"4":5.0,"5":5.4,"6":4.6,"7":5.0,"8":4.4,"9":4.9,"10":5.4,"11":4.8,"12":4.8,"13":4.3,"14":5.8,"15":5.7,"16":5.4,"17":5.1,"18":5.7,"19":5.1,"20":5.4,"21":5.1,"22":4.6,"23":5.1,"24":4.8,"25":5.0,"26":5.0,"27":5.2,"28":5.2,"29":4.7,"30":4.8,"31":5.4,"32":5.2,"33":5.5,"34":4.9,"35":5.0,"36":5.5,"37":4.9,"38":4.4,"39":5.1,"40":5.0,"41":4.5,"42":4.4,"43":5.0,"44":5.1,"45":4.8,"46":5.1,"47":4.6,"48":5.3,"49":5.0,"50":7.0,...
2, vì nó chưa xác minh rằng giá trị của tham số phải là một chuỗi và không phải là số hoặc bất kỳ loại đối tượng nào khác.
: Flask does not make an evaluation of the request parameters, so we will have to do an evaluation ourselves, otherwise it will be used in the function. For example, if we request the URL:
'{"sepal_length":{"0":5.1,"1":4.9,"2":4.7,"3":4.6,"4":5.0,"5":5.4,"6":4.6,"7":5.0,"8":4.4,"9":4.9,"10":5.4,"11":4.8,"12":4.8,"13":4.3,"14":5.8,"15":5.7,"16":5.4,"17":5.1,"18":5.7,"19":5.1,"20":5.4,"21":5.1,"22":4.6,"23":5.1,"24":4.8,"25":5.0,"26":5.0,"27":5.2,"28":5.2,"29":4.7,"30":4.8,"31":5.4,"32":5.2,"33":5.5,"34":4.9,"35":5.0,"36":5.5,"37":4.9,"38":4.4,"39":5.1,"40":5.0,"41":4.5,"42":4.4,"43":5.0,"44":5.1,"45":4.8,"46":5.1,"47":4.6,"48":5.3,"49":5.0,"50":7.0,...
1, the API will return
'{"sepal_length":{"0":5.1,"1":4.9,"2":4.7,"3":4.6,"4":5.0,"5":5.4,"6":4.6,"7":5.0,"8":4.4,"9":4.9,"10":5.4,"11":4.8,"12":4.8,"13":4.3,"14":5.8,"15":5.7,"16":5.4,"17":5.1,"18":5.7,"19":5.1,"20":5.4,"21":5.1,"22":4.6,"23":5.1,"24":4.8,"25":5.0,"26":5.0,"27":5.2,"28":5.2,"29":4.7,"30":4.8,"31":5.4,"32":5.2,"33":5.5,"34":4.9,"35":5.0,"36":5.5,"37":4.9,"38":4.4,"39":5.1,"40":5.0,"41":4.5,"42":4.4,"43":5.0,"44":5.1,"45":4.8,"46":5.1,"47":4.6,"48":5.3,"49":5.0,"50":7.0,...
2, since it has not verified that the value of the parameter must be a string and not a number or any other type of object.

Trả về các loại dữ liệu khác nhau bằng bình

Như chúng ta có thể thấy, cho đến nay chúng ta đã trả lại chuỗi văn bản. Tuy nhiên, API thường trả về dữ liệu ở định dạng JSON. Để làm điều này, chúng ta phải sử dụng mô -đun

'{"sepal_length":{"0":5.1,"1":4.9,"2":4.7,"3":4.6,"4":5.0,"5":5.4,"6":4.6,"7":5.0,"8":4.4,"9":4.9,"10":5.4,"11":4.8,"12":4.8,"13":4.3,"14":5.8,"15":5.7,"16":5.4,"17":5.1,"18":5.7,"19":5.1,"20":5.4,"21":5.1,"22":4.6,"23":5.1,"24":4.8,"25":5.0,"26":5.0,"27":5.2,"28":5.2,"29":4.7,"30":4.8,"31":5.4,"32":5.2,"33":5.5,"34":4.9,"35":5.0,"36":5.5,"37":4.9,"38":4.4,"39":5.1,"40":5.0,"41":4.5,"42":4.4,"43":5.0,"44":5.1,"45":4.8,"46":5.1,"47":4.6,"48":5.3,"49":5.0,"50":7.0,...
3. Hãy cùng xem một ví dụ về cách trả về chuỗi trước đó, nhưng lần này ở định dạng JSON:

from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello():
  return {"Hello world!"}
6

Theo cách tương tự, chúng ta có thể trả về một loại đối tượng khác, chẳng hạn như bộ dữ liệu. Hãy để xem một ví dụ sẽ trông như thế nào, tạo ra một điểm cuối mới trả về bộ dữ liệu IRIS thông qua yêu cầu GET:

from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello():
  return {"Hello world!"}
7

Để vượt qua DataFrame, trước tiên chúng ta phải chuyển đổi nó thành một đối tượng có thể được chuyển đổi thành JSON, giống như từ điển. Với điều này, chúng tôi sẽ có một câu trả lời như sau:

from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello():
  return {"Hello world!"}
8
from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello():
  return {"Hello world!"}
9

Cuối cùng, bạn có thể gửi hình ảnh qua API trong Python được làm trong bình không? Ở Fastapi, chúng ta đã thấy rằng nó có thể và, tất nhiên, Flask sẽ không ít hơn. Trên thực tế, cách để thực hiện nó rất giống nhau, chỉ có vậy, trong trường hợp này, chúng ta phải lưu nội dung trong chính bình (hoặc bất kỳ thư mục nào) và gửi nó bằng hàm

'{"sepal_length":{"0":5.1,"1":4.9,"2":4.7,"3":4.6,"4":5.0,"5":5.4,"6":4.6,"7":5.0,"8":4.4,"9":4.9,"10":5.4,"11":4.8,"12":4.8,"13":4.3,"14":5.8,"15":5.7,"16":5.4,"17":5.1,"18":5.7,"19":5.1,"20":5.4,"21":5.1,"22":4.6,"23":5.1,"24":4.8,"25":5.0,"26":5.0,"27":5.2,"28":5.2,"29":4.7,"30":4.8,"31":5.4,"32":5.2,"33":5.5,"34":4.9,"35":5.0,"36":5.5,"37":4.9,"38":4.4,"39":5.1,"40":5.0,"41":4.5,"42":4.4,"43":5.0,"44":5.1,"45":4.8,"46":5.1,"47":4.6,"48":5.3,"49":5.0,"50":7.0,...
4.

from fastapi import FastAPI
app =from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello(name: str):
  return {'Hello ' + name + '!'} 
0

Bây giờ chúng tôi đã biết cách gửi các loại nội dung khác nhau với API Python được tạo bằng bình, hãy để xem cách kiểm tra xem API của chúng tôi có hoạt động chính xác không.

Kiểm tra chức năng của API bình

Trước khi thực hiện API Python được thực hiện trong bình, chúng tôi phải kiểm tra để đảm bảo rằng chúng tôi đang lộ nó trên một cổng. Đối với điều này, chúng tôi phải bao gồm mã mà tôi đã đề cập và tôi đặt bên dưới:

from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello():
  return {"Hello world!"}
3

Vì vậy, để chạy ứng dụng, chúng tôi chỉ cần chạy tệp Python của chúng tôi nơi chúng tôi đã tạo API. Trong trường hợp của tôi, lệnh là như sau:

from fastapi import FastAPI
app =from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello(name: str):
  return {'Hello ' + name + '!'} 
2

Điều này sẽ tạo ra một mã như sau:

Hướng dẫn is python good for creating apis? - python có tốt để tạo apis không?

Như bạn có thể thấy, API của chúng tôi sẽ chạy trên máy chủ cục bộ của chúng tôi, trong cổng mà chúng tôi đã chỉ ra (trong trường hợp của tôi, cổng 8000).

Vì vậy, để kiểm tra API, chúng tôi chỉ có thể truy cập trình duyệt của mình và đi đến các điểm cuối hoặc, trực tiếp, thực hiện các yêu cầu từ Python:

from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello():
  return {"Hello world!"}
8
from fastapi import FastAPI
app =from fastapi import FastAPI
app = FastAPI()

@app.get("/my-first-api")
def hello(name: str):
  return {'Hello ' + name + '!'} 
4

Như chúng ta có thể thấy, API đang trả về nội dung đúng cách.

Chúng tôi cũng có thể thêm tài liệu Swagger và Openapi vào API của chúng tôi trong bình, mặc dù làm như vậy sẽ tẻ nhạt hơn một chút so với Fastapi. Trên thực tế, điều này sẽ làm cho một bài đăng, vì vậy tôi liên kết bạn với bài đăng này được viết bởi Sean Bradley, trong trường hợp bạn quan tâm.

Sự kết luận

Như bạn có thể thấy, cả việc sử dụng fastapi và bình tạo API đều rất đơn giản, mặc dù chúng có những khác biệt nhất định:

  • Flask là một khung cho phép bạn tạo toàn bộ các ứng dụng web.
  • Fastapi thực hiện xác thực các loại dữ liệu mà chúng tôi thực hiện, cũng như toàn bộ quy trình tài liệu, tiết kiệm cho chúng tôi rất nhiều thời gian so với việc chúng tôi có làm điều đó trong bình hay không.

Vì vậy, khuyến nghị của tôi sẽ là, nếu bạn chỉ muốn tạo API, hãy thực hiện nó trong Fastapi, vì nó chắc chắn sẽ nhanh hơn. Tuy nhiên, nếu bạn muốn tạo giao diện người dùng hoàn chỉnh (mặt trước và mặt sau) và API là một phần của hệ sinh thái, tôi khuyên bạn nên sử dụng bình, vì mọi thứ sẽ nằm trong cùng một khung và bạn sẽ dễ dàng hơn nhiều.

Trong mọi trường hợp, việc tạo API trong Python là một điều rất đơn giản và cơ bản cho bất kỳ người tận tâm nào trong thế giới dữ liệu. Hoặc đối với việc thực hiện các quy trình hoặc cho việc sản xuất các thuật toán học máy, chắc chắn các API là một phần của quá trình đó.

Như mọi khi, tôi hy vọng bạn tìm thấy bài viết thú vị. Nếu vậy, tôi khuyên bạn nên đăng ký để được thông báo mỗi khi tôi tải lên một bài đăng mới. Trong mọi trường hợp, hẹn gặp lại ở cái tiếp theo!

Bạn có thể tạo API với Python không?

Có nhiều cách khác nhau để tạo API trong Python, được sử dụng nhiều nhất là fastapi và bình.FastAPI and Flask.

Ngôn ngữ nào là tốt nhất để tạo API?

Java được cho là an toàn hơn bất kỳ ngôn ngữ lập trình nào khác.Bảo mật của nó được lấy từ một tập hợp lớn các API, công cụ và triển khai các thuật toán, cơ chế và giao thức bảo mật thường được sử dụng. is said to be more secure than any other programming language. Its security is obtained from a large set of APIs, tools, and implementations of commonly-used security algorithms, mechanisms, and protocols.

Python có tốt cho API REST không?

Một trong những cách phổ biến nhất để xây dựng API là phong cách kiến trúc còn lại.Python cung cấp một số công cụ tuyệt vời không chỉ để lấy dữ liệu từ các API REST mà còn để xây dựng API REST Python của riêng bạn.Python provides some great tools not only to get data from REST APIs but also to build your own Python REST APIs.

Nền tảng nào là tốt nhất để phát triển API?

9 Nền tảng quản lý API tốt nhất..
Nền tảng quản lý API hàng đầu.Dell Boomi.....
Swaggerhub.Swaggerhub là một nền tảng quản lý API để các nhóm thúc đẩy kỷ luật và tính nhất quán trong quá trình phát triển.....
Akana: ....
3Scale: ....
Quản lý API CA: ....
Ứng dụng WSO2 Cloud: ....
IBM API Connect: ....
Mulesoft Anypoint:.