Cách đúng để xây dựng API với Python
Tất cả những gì bạn cần biết trên phát triển API trong bình
Ảnh của Steve Johnson trên unplashLàm thế nào chúng ta có thể thiết lập một cách để giao tiếp từ thể hiện phần mềm này sang trường hợp khác? Nghe có vẻ đơn giản, và - hoàn toàn trung thực - đó là.ow can we set up a way to communicate from one software instance to another? It sounds simple, and — to be completely honest — it is.
Tất cả những gì chúng ta cần là một API.
API [giao diện lập trình ứng dụng] là một giao diện đơn giản xác định các loại yêu cầu [nhu cầu/câu hỏi, v.v.] có thể được thực hiện, cách chúng được thực hiện và cách xử lý chúng.
Flask API Video Walkthrough - Bao gồm tất cả mọi thứ trong bài viết này!Trong trường hợp của chúng tôi, chúng tôi sẽ xây dựng một API cho phép chúng tôi gửi một loạt các yêu cầu GET/POST/PUT/PAPT/PAIT/DETRE [thêm về điều này sau], cho các điểm cuối khác nhau và trả về hoặc sửa đổi dữ liệu được kết nối với API của chúng tôi.
Chúng tôi sẽ sử dụng khung bình để tạo API và Postman của chúng tôi để kiểm tra nó. Nói tóm lại, chúng tôi sẽ bao gồm:
> Setup
- Our Toy Data
- Initialize a Flask API
- Endpoints
- Running a Local Server
> Writing Our API
- GET
- POST
- 401 Unauthorized
- PUT
- DELETE
- Users Class [summary]
> That's It!
Thành lập
API của chúng tôi sẽ chứa hai điểm cuối, users
và locations
. Cái trước sẽ cho phép truy cập vào các chi tiết của người dùng đã đăng ký của chúng tôi, trong khi cái sau sẽ bao gồm một danh sách các vị trí cafe.
Trường hợp sử dụng giả thuyết ở đây là của một ứng dụng đánh dấu trang Cafe trị giá hàng triệu, nơi người dùng mở ứng dụng và đánh dấu quán cà phê yêu thích của họ-như Google Maps, nhưng không hữu ích.
Dữ liệu đồ chơi của chúng tôi
Để đơn giản, chúng tôi sẽ lưu trữ dữ liệu này trong hai tệp CSV cục bộ. Trong thực tế, có lẽ bạn muốn xem một cái gì đó như MongoDB hoặc Google Firebase.
Các tệp CSV của chúng tôi trông như thế này:
Dữ liệu của người dùng trong người dùng.csv. Hình ảnh của tác giả. Ánh xạ vị trí ở vị trí.csv. Hình ảnh của tác giả.Bạn có thể tải xuống user.csv tại đây và vị trí.csv tại đây.
Khởi tạo API bình
Bây giờ đến tập lệnh Python của chúng tôi, chúng tôi cần nhập các mô -đun và khởi tạo API của chúng tôi, như vậy:
from flask import Flask
from flask_restful import Resource, Api, reqparse
import pandas as pd
import astapp = Flask[__name__]
api = Api[app]
Điểm cuối
Khi chúng tôi đã chạm vào, API của chúng tôi sẽ có hai điểm cuối, users
và locations
.
Kết quả của điều này là - nếu API của chúng tôi được đặt tại www.api.com
, giao tiếp với lớp Users
sẽ được cung cấp tại ____10 và
from flask import Flask1 tại
from flask_restful import Resource, Api, reqparse
import pandas as pd
import astapp = Flask[__name__]
api = Api[app]
from flask import Flask2.
from flask_restful import Resource, Api, reqparse
import pandas as pd
import astapp = Flask[__name__]
api = Api[app]
Để tạo điểm cuối, chúng tôi xác định một lớp Python [với bất kỳ tên nào bạn muốn] và kết nối nó với điểm cuối mong muốn của chúng tôi với
from flask import Flask3, như thế này:
from flask_restful import Resource, Api, reqparse
import pandas as pd
import astapp = Flask[__name__]
api = Api[app]
- Flask cần biết rằng lớp này là điểm cuối cho API của chúng tôi và vì vậy chúng tôi vượt qua
from flask import Flask
4 với định nghĩa lớp.
from flask_restful import Resource, Api, reqparse
import pandas as pd
import astapp = Flask[__name__]
api = Api[app] - Bên trong lớp, chúng tôi bao gồm các phương thức HTTP của chúng tôi [nhận, bài đăng, xóa, v.v.].
- Cuối cùng, chúng tôi liên kết lớp
Users
của chúng tôi với điểm cuốifrom flask import Flask
6 bằng cách sử dụng
from flask_restful import Resource, Api, reqparse
import pandas as pd
import astapp = Flask[__name__]
api = Api[app]from flask import Flask
3.
from flask_restful import Resource, Api, reqparse
import pandas as pd
import astapp = Flask[__name__]
api = Api[app]
Bởi vì chúng tôi muốn hai điểm cuối, chúng tôi sao chép logic:two endpoints, we replicate the logic:
Chạy máy chủ cục bộ
Cuối cùng, khi chúng tôi viết API của chúng tôi, chúng tôi cần kiểm tra nó!
Để làm điều này, chúng ta cần lưu trữ API của mình, điều mà chúng ta có thể làm cục bộ bằng cách thêm
from flask import Flask8 vào cuối tập lệnh của chúng ta như thế này:
from flask_restful import Resource, Api, reqparse
import pandas as pd
import astapp = Flask[__name__]
api = Api[app]
if __name__ == '__main__':
app.run[] # run our Flask app
Bây giờ, khi chúng ta chạy kịch bản của mình, chúng ta sẽ thấy một cái gì đó như thế này:
Khởi tạo máy chủ localhost của chúng tôi. Hình ảnh của tác giả.Khi máy chủ của chúng tôi được thiết lập, chúng tôi có thể kiểm tra API của chúng tôi khi chúng tôi xây dựng nó bằng Postman, nếu bạn đã sử dụng nó trước khi nó là tiêu chuẩn thực tế để kiểm tra API. Và, đừng lo lắng - nó cực kỳ đơn giản để sử dụng - tải xuống Postman từ đây.
Trước khi đi trước, bạn có thể tìm thấy toàn bộ kịch bản mà chúng tôi sẽ xây dựng ở đây. Nếu bạn không chắc chắn một đoạn mã nên đi đâu, hãy kiểm tra ở đó!
Viết phương thức API
Bên trong mỗi lớp của chúng tôi, chúng tôi giữ các phương thức HTTP của chúng tôi, nhận, đăng và xóa.
Để tạo phương thức GET, chúng tôi sử dụng
from flask import Flask9. Đăng và xóa theo cùng một mẫu.
from flask_restful import Resource, Api, reqparse
import pandas as pd
import astapp = Flask[__name__]
api = Api[app]
LẤY
Phương pháp GET là đơn giản nhất. Chúng tôi trả về tất cả dữ liệu được lưu trữ trong
if __name__ == '__main__':
app.run[] # run our Flask app
0 được bọc bên trong một từ điển, như vậy:Sau đó, chúng tôi có thể chạy tập lệnh để khởi tạo API của chúng tôi, mở Postman và gửi yêu cầu nhận đến địa chỉ Localhost của chúng tôi [thường là ____ 21] - đây là điểm nhập API của chúng tôi.
Làm thế nào để gửi yêu cầu nhận API của chúng tôi. Hình ảnh của tác giả.Để gửi yêu cầu nhận API của chúng tôi trong Postman, chúng tôi:
- Chọn Nhận từ thả xuống
- Nhập điểm nhập của phiên bản API của chúng tôi +
from flask import Flask
6 [điểm cuối]
from flask_restful import Resource, Api, reqparse
import pandas as pd
import astapp = Flask[__name__]
api = Api[app] - Nhấn gửiSend
- Kiểm tra mã trạng thái được API của chúng tôi trả về [chúng ta sẽ thấy
if __name__ == '__main__':
3]
app.run[] # run our Flask app - Xem phản hồi API của chúng tôi, đó là
if __name__ == '__main__':
0 trong định dạng JSON [như từ điển]
app.run[] # run our Flask app
BƯU KIỆN
Phương pháp bài viết cho phép chúng tôi thêm hồ sơ vào dữ liệu của chúng tôi. Trong trường hợp này, chúng tôi sẽ có lập luận cho
if __name__ == '__main__':
app.run[] # run our Flask app
5, if __name__ == '__main__':
app.run[] # run our Flask app
6 và if __name__ == '__main__':
app.run[] # run our Flask app
7.Các đối số này được chuyển đến điểm cuối API của chúng tôi dưới dạng các tham số URL, trông như thế này:
//127.0.0.1:5000/users?userId=abc123&name=The Rock&city=Los Angeles
Chúng tôi có thể chỉ định các tham số cần thiết và sau đó phân tích các giá trị được cung cấp bằng cách sử dụng
if __name__ == '__main__':
app.run[] # run our Flask app
8 - như thế này:Hãy để phá vỡ mã phân tích cú pháp của chúng tôi xuống:
- Chúng tôi khởi tạo trình phân tích cú pháp của chúng tôi với
if __name__ == '__main__':
9.
app.run[] # run our Flask app - Thêm đối số của chúng tôi với
//127.0.0.1:5000/users?userId=abc123&name=The Rock&city=Los Angeles
0 - Lưu ý rằng//127.0.0.1:5000/users?userId=abc123&name=The Rock&city=Los Angeles
1 có nghĩa là cần phải có đối số trong yêu cầu. Ngoài ra, chúng tôi có thể thêm các đối số tùy chọn với//127.0.0.1:5000/users?userId=abc123&name=The Rock&city=Los Angeles
2. - Phân tích các đối số của chúng tôi và các giá trị của chúng vào từ điển Python bằng cách sử dụng
//127.0.0.1:5000/users?userId=abc123&name=The Rock&city=Los Angeles
3.
Sau đó, chúng ta có thể truy cập các giá trị được truyền cho mỗi đối số như chúng ta thường làm với các cặp giá trị khóa trong một từ điển.
Hãy cùng nhau đặt chúng lại để thêm các giá trị vào CSV của chúng tôi:
Nếu nó bắt đầu trông khó hiểu hơn một chút - tất cả những gì chúng tôi làm là:
- Tạo một hàng dữ liệu mới
//127.0.0.1:5000/users?userId=abc123&name=The Rock&city=Los Angeles
4 từ các tham số URL//127.0.0.1:5000/users?userId=abc123&name=The Rock&city=Los Angeles
5 - Nối nó vào
//127.0.0.1:5000/users?userId=abc123&name=The Rock&city=Los Angeles
6 đã tồn tại trước - Lưu dữ liệu mới được hợp nhất
- Và, trả về
//127.0.0.1:5000/users?userId=abc123&name=The Rock&city=Los Angeles
6 cùng với mã trạng tháiif __name__ == '__main__':
3.
app.run[] # run our Flask app
Bây giờ chúng tôi có thể gửi một yêu cầu bài đăng để tạo một người dùng mới, dễ dàng!POST request to create a new user, easy!
401 trái phép
Mã của chúng tôi xử lý các yêu cầu POST, cho phép chúng tôi viết dữ liệu mới lên
if __name__ == '__main__':
app.run[] # run our Flask app
0 - nhưng nếu người dùng đó đã tồn tại thì sao?POST requests, allowing us to write new data to if __name__ == '__main__':
app.run[] # run our Flask app
0 — but what if that user already exists?Đối với điều đó, chúng ta cần thêm một tấm séc. Nếu users
0 đã tồn tại, chúng tôi sẽ trả lại mã users
1 cho người dùng.
Quay trở lại Postman, chúng tôi có thể kiểm tra xem API của chúng tôi có hoạt động hay không bằng cách cố gắng thêm cùng một người dùng - lần này, Rock đã nhận được phản hồi users
1.
ĐẶT
Điều gì sẽ xảy ra nếu chúng ta muốn thêm một quán cà phê cho người dùng? Chúng tôi có thể sử dụng bài đăng vì điều này trả về mã users
1 - thay vào đó, chúng tôi sử dụng PUT.POST as this returns a users
1 code — instead, we use PUT.
Tương tự như bài đăng, chúng ta cần thêm logic IF-Else trong trường hợp users
0 được cung cấp không tồn tại.POST, we need to add if-else logic in the case of the provided users
0 not existing.
Khác với một vài điều chỉnh nhỏ cho mã, phương thức đặt của chúng tôi gần như giống hệt nhau để đăng.PUT method is almost identical to POST.
Ở đây chúng tôi sử dụng phương thức PUT để thêm quán cà phê với ID 0007 vào các vị trí đánh dấu Rock Rock. Hình ảnh của tác giả.PUT method to add the cafe with ID 0007 to The Rock’s bookmarked locations. Image by Author.Quay trở lại Postman, các tham số đầu vào cần thiết của chúng tôi đã thay đổi. Bây giờ, chúng tôi chỉ cần users
0 và users
6 để thêm vào người dùng đã đánh dấu locations
.
XÓA BỎ
Chúng ta cũng có thể xóa các bản ghi với phương thức xóa.DELETE method.
Phương pháp này khá đơn giản, chúng ta cần chỉ định users
0 để xóa và thêm một số logic IF-Else trong trường hợp users
0 không tồn tại.
Vì vậy, nếu locations
0 quyết định ứng dụng của chúng tôi là vô dụng và muốn rời đi, chúng tôi sẽ gửi một yêu cầu xóa có chứa users
0 của cô ấy.DELETE request containing her users
0.
Chúng tôi có thể kiểm tra điều này trong Postman và như mong đợi, chúng tôi trả về dữ liệu của chúng tôi mà không cần hồ sơ Jill. Điều gì sẽ xảy ra nếu chúng ta thử và xóa một người dùng không tồn tại?
Nếu chúng ta xóa một userid không tồn tại, chúng ta sẽ nhận được mã trạng thái không tìm thấy 404 và một thông báo giải thích rằng userid không tồn tại. Hình ảnh của tác giả.DELETE a userId that does not exist, we will receive a 404 Not Found status code and a message explaining that the userId does not exist. Image by Author.Một lần nữa, chúng tôi nhận được locations
2 của chúng tôi và một thông điệp ngắn gọn giải thích rằng users
0 không được tìm thấy.
Lớp người dùng
Đó là tất cả các phần tạo nên lớp Users
, được truy cập thông qua điểm cuối
from flask import Flask6 của chúng tôi. Bạn có thể tìm thấy toàn bộ kịch bản cho nó ở đây.
from flask_restful import Resource, Api, reqparse
import pandas as pd
import astapp = Flask[__name__]
api = Api[app]
Sau đó, chúng ta vẫn cần phải kết hợp lớp
from flask import Flask1. Lớp khác này sẽ cho phép chúng tôi có được, đăng, vá [cập nhật] và xóa các vị trí.
from flask_restful import Resource, Api, reqparse
import pandas as pd
import astapp = Flask[__name__]
api = Api[app]
Mỗi vị trí được cung cấp một ID duy nhất - khi người dùng đánh dấu một vị trí, ID duy nhất đó được thêm vào danh sách locations
của họ với locations
8.
Mã cho điều này không khác nhiều so với những gì chúng tôi đã viết trong lớp Users
để chúng tôi không lặp lại chính mình. Tuy nhiên, bạn có thể tìm thấy nó cùng với lớp Users
ở đây.
Đó là nó!
Nó đơn giản như vậy. Thiết lập một API với bình và Python là vô cùng đơn giản.
Bây giờ chúng tôi có một phương pháp dễ sử dụng và tiêu chuẩn hóa để giao tiếp giữa các giao diện khác nhau.
Chúng tôi đã bao gồm tất cả các phương thức yêu cầu phổ biến nhất - nhận, đăng, đặt và xóa - và một vài mã trạng thái HTTP - 200, 401 và 404.
Cuối cùng, chúng tôi đã học được cách lưu trữ API của chúng tôi tại địa phương và kiểm tra nó với Postman - cho phép chúng tôi nhanh chóng chẩn đoán các vấn đề và đảm bảo API của chúng tôi hoạt động như dự định.
Tất cả trong tất cả, phát triển API là một kỹ năng quan trọng đối với các nhà phát triển, nhà khoa học dữ liệu và hầu hết mọi vai trò bao gồm công nghệ khác mà bạn có thể tưởng tượng.
Nếu bạn muốn nhiều hơn, tôi đăng các hướng dẫn lập trình trên YouTube ở đây. Hoặc, nếu bạn có bất kỳ câu hỏi hoặc ý tưởng để cải thiện, hãy cho tôi biết trên Twitter hoặc trong các ý kiến dưới đây.
Tôi hy vọng bạn thích bài viết và cảm ơn bạn đã đọc!
Giảm giá 70% cho khóa học NLP với Transformers
Nhìn vào thực hiện các bước tiếp theo trong phát triển API và chia sẻ công việc của bạn với thế giới? Đọc về triển khai API với nền tảng Google Cloud tại đây: