Thực hiện những bước đầu tiên để tương tác với web bằng Python có vẻ khó khăn — nhưng không nhất thiết phải như vậy. Đó là một quá trình đơn giản đến ngạc nhiên, với các quy tắc và hướng dẫn được thiết lập tốt
Chúng tôi sẽ đề cập đến các yếu tố cần thiết tuyệt đối để bắt đầu, bao gồm
- Application Program Interfaces [APIs]
- Javascript Object Notation [JSON]
- Requests with Python
- Real world use-cases
Giao diện chương trình ứng dụng
Chúng ta có thể xem API như những chiếc hộp thần kỳ nhỏ này để chúng ta gửi dữ liệu — sau đó nhận lại dữ liệu
Cái hộp nhỏ này không gì khác hơn là một tập lệnh ở đâu đó trên máy chủ. Nó đóng vai trò trung gian giữa chúng ta — khách hàng — và họ — máy chủ. Chúng tôi có thể nói với người trung gian rằng chúng tôi muốn biết điều gì đó, thay đổi điều gì đó hoặc xóa điều gì đó — và nếu hướng dẫn của chúng tôi được nhận chính xác, người trung gian sẽ vui vẻ bắt buộc.
Có các hướng dẫn được thiết lập tốt về việc xây dựng API, tất cả chúng đều tuân theo các mẫu sử dụng giống nhau. Phần lớn các API này [trên web] sử dụng thứ gọi là kiến trúc REST
CÒN LẠI
Kiến trúc API chuyển giao trạng thái đại diện [REST] áp dụng sáu quy tắc
- Tất cả các yêu cầu phải được xử lý bằng một giao diện hướng ra ngoài duy nhất
- Có sự độc lập giữa máy khách và máy chủ — nghĩa là những thay đổi ở phía máy khách [chúng tôi] sẽ không ảnh hưởng đến chức năng phía máy chủ hoặc ngược lại
- Mọi yêu cầu mới được xử lý tách biệt với các yêu cầu khác — API không lưu giữ bất kỳ thông tin nào về phiên của chúng tôi và do đó, nó không có trạng thái
- Bộ nhớ đệm — API phải chỉ định liệu người dùng có thể lưu các phản hồi vào bộ đệm hay không
- API bao gồm các hệ thống phân lớp, tạo ra một cấu trúc mô-đun
- Nếu áp dụng cho việc sử dụng API, nó sẽ cung cấp cho người dùng mã thực thi theo yêu cầu
Tất cả những thứ này tạo ra một cổng duy nhất, với các hành vi có thể dự đoán được có thể được giao tiếp mà không có quá nhiều bất ngờ
Các loại yêu cầu
Khi chúng tôi giao tiếp với API, chúng tôi sẽ có xu hướng thực hiện một trong các yêu cầu sau
- NHẬN — Truy xuất thông tin từ API
- POST — Tạo một tài nguyên mới [e. g. , thêm bản ghi dữ liệu mới]
- PUT — Cập nhật tài nguyên hiện có [e. g. , thay đổi giá trị cụ thể trong bản ghi hiện có]
- DELETE — Xóa một tài nguyên hiện có [e. g. , xóa bản ghi dữ liệu]
Phương pháp được sử dụng phổ biến nhất là giao thức GET, cho phép chúng tôi tải xuống dữ liệu
Chúng tôi có thể sử dụng API Google Maps để NHẬN tọa độ kinh độ và vĩ độ cho một địa chỉ cụ thể
POST, PUT và DELETE khác nhau ở chỗ chúng chỉ được sử dụng khi sửa đổi thông tin. Sử dụng API GitHub, chúng tôi có thể tạo một repo bằng POST, cập nhật nó bằng PUT và xóa nó bằng DELETE
Ngoài ra còn có PATCH - điều này tương tự như PUT nhưng được sử dụng cho 'cập nhật một phần'. Tôi chưa bao giờ sử dụng phương pháp này và tôi không ghi nhận đã từng thấy nó trong tài liệu API — nhưng nó tồn tại
Mã HTTP
Khi chúng tôi sử dụng GET, POST, PUT hoặc DELETE — API sẽ liên lạc lại với chúng tôi, một phần của phản hồi này sẽ bao gồm mã HTTP cho chúng tôi biết kết quả yêu cầu của chúng tôi. Đây thường là một trong những điều sau đây
Success Codes
200 OK - success [common response to GET]
201 Created - new resource created [POST/PUT]
204 No Content - success but not content returned [not an issue]Client Error Codes
400 Bad Request - request not understood due to bad syntax [fix your JSON]
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist [or does it...]Server Error Codes
500 Internal Server Error - there's something wrong with the serverOP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter
Ký hiệu đối tượng Javascript
Khi tương tác với API, chúng tôi sử dụng mẫu được chuẩn hóa để gửi và nhận dữ liệu để cả khách hàng [chúng tôi] và API có thể xử lý dữ liệu chính xác — định dạng này là Ký hiệu đối tượng Javascript [JSON]
JSON thực hiện cùng một cấu trúc phân cấp với các cặp khóa-giá trị mà chúng ta thấy trong từ điển Python. Chúng tôi có thể nhúng danh sách, chuỗi hoặc thậm chí các từ điển khác bằng cấu trúc này
Hãy thử một ví dụ, nhấp vào đây sẽ gửi yêu cầu tới PokéAPI bằng trình duyệt của chúng tôi — trả về phiên bản văn bản gốc của phản hồi JSON từ API
Phản hồi JSON từ PokéAPI, trong trình duyệt của chúng tôi
Chúng ta có thể thấy định dạng giống như từ điển của phản hồi JSON. Về cấu trúc, không có sự khác biệt thực sự giữa từ điển Python và JSON — tuy nhiên chúng ta không thể sử dụng trực tiếp từ điển Python khi giao tiếp với API
Yêu cầu Python
Chúng ta đã khám phá những kiến thức cơ bản về API — nhưng làm thế nào chúng ta có thể bắt đầu tương tác với chúng trong Python?
Chúng ta có thể sử dụng thư viện
Success Codes0 cực kỳ phổ biến. Nếu chúng tôi muốn gửi yêu cầu NHẬN — tất cả những gì chúng tôi viết là
200 OK - success [common response to GET]
201 Created - new resource created [POST/PUT]
204 No Content - success but not content returned [not an issue]Client Error Codes
400 Bad Request - request not understood due to bad syntax [fix your JSON]
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist [or does it...]Server Error Codes
500 Internal Server Error - there's something wrong with the serverOP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter
import requestsrequests.get['//api_address.com']
Tất cả những gì chúng ta cần làm là nhập URL của API mà chúng ta đang gửi yêu cầu và viola — chúng ta sẽ nhận được phản hồi JSON từ API
Sử dụng cùng một 'điểm cuối' [một điểm vào API cụ thể] mà chúng tôi đã sử dụng trước đây cho PokéAPI, chúng tôi có thể trả về cùng một thông tin trong Python như vậy
Có ba điều quan trọng cần lưu ý ở đây
- Đối tượng phản hồi được trả về bởi các yêu cầu của chúng tôi cho chúng tôi thấy rằng các yêu cầu đã thành công —
Success Codes
1 — nghĩa là 200 OK [tham khảo các mã trước đó]
200 OK - success [common response to GET]
201 Created - new resource created [POST/PUT]
204 No Content - success but not content returned [not an issue]Client Error Codes
400 Bad Request - request not understood due to bad syntax [fix your JSON]
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist [or does it...]Server Error Codes
500 Internal Server Error - there's something wrong with the serverOP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter - Chúng tôi truy cập dữ liệu được trả về bằng phương thức phản hồi
Success Codes
2, điều này tạo ra phiên bản từ điển Python của phản hồi JSON
200 OK - success [common response to GET]
201 Created - new resource created [POST/PUT]
204 No Content - success but not content returned [not an issue]Client Error Codes
400 Bad Request - request not understood due to bad syntax [fix your JSON]
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist [or does it...]Server Error Codes
500 Internal Server Error - there's something wrong with the serverOP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter - Đầu ra từ điển hoàn toàn giống với đầu ra mà chúng ta đã thấy khi truy cập điểm cuối API thông qua trình duyệt của mình
Bởi vì chúng tôi đã trả về một từ điển bằng phương pháp
Success Codes2, nên chúng tôi có thể truy cập các phần cụ thể của phản hồi bằng cách sử dụng cùng một phương pháp mà chúng tôi thường sử dụng trong từ điển Python. Nếu chúng tôi muốn trả lại tên các khả năng của Charizard
200 OK - success [common response to GET]
201 Created - new resource created [POST/PUT]
204 No Content - success but not content returned [not an issue]Client Error Codes
400 Bad Request - request not understood due to bad syntax [fix your JSON]
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist [or does it...]Server Error Codes
500 Internal Server Error - there's something wrong with the serverOP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter
Đối với tất cả các bạn hâm mộ Pokémon, tôi cho rằng đây là phần cuối của bài viết — đối với bất kỳ ai ít quan tâm đến việc trả lại danh sách toàn diện về từng Pokémon và khả năng của chúng, hãy chuyển sang một số API có thể hữu ích hơn…
API bản đồ Google
Google [tất nhiên] cung cấp rất nhiều API — một trong số đó đặc biệt là API mã hóa địa lý của họ, nó cho phép bạn trả về tọa độ kinh độ-vĩ độ cho bất kỳ địa chỉ nào. Và đó cũng là một phần quan trọng trong trải nghiệm chuyên nghiệp đầu tiên của tôi với Python
Kể từ đó, nó đã thay đổi rất nhiều — nhưng khi tôi nghĩ đến 'API' thì trải nghiệm đó là một trong những điều đầu tiên tôi nghĩ đến. Nó cũng hoạt động như một phần giới thiệu tuyệt vời về cách sử dụng API thông thường
1. Ủy quyền — hầu hết các API đều cần chúng tôi bao gồm khóa ủy quyền với các lệnh gọi của mình, nếu chúng tôi bỏ lỡ điều này — chúng tôi thường sẽ trả lại mã 4xx cho chúng tôi biết rằng chúng tôi cần ủy quyền.
Các bước để nhận khóa API được bao gồm trong tài liệu API Mã hóa địa lý, nó rất đơn giản nên tôi sẽ không lặp lại tài liệu ở đây
2. Thông số API — chúng tôi sẽ cố gắng trả lại tọa độ của Đấu trường La Mã ở Rome. Địa chỉ của địa chỉ này là
Success Codes4, chúng tôi sẽ đưa địa chỉ này vào trong URL của yêu cầu của chúng tôi dưới dạng thông số.
200 OK - success [common response to GET]
201 Created - new resource created [POST/PUT]
204 No Content - success but not content returned [not an issue]Client Error Codes
400 Bad Request - request not understood due to bad syntax [fix your JSON]
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist [or does it...]Server Error Codes
500 Internal Server Error - there's something wrong with the serverOP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter
Chúng ta cũng có thể sử dụng cách tiếp cận tương tự để xác thực
Và ngay tại đó, trong phản hồi JSON của chúng tôi, chúng tôi có thể thấy
Success Codes5 và
200 OK - success [common response to GET]
201 Created - new resource created [POST/PUT]
204 No Content - success but not content returned [not an issue]Client Error Codes
400 Bad Request - request not understood due to bad syntax [fix your JSON]
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist [or does it...]Server Error Codes
500 Internal Server Error - there's something wrong with the serverOP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter
Success Codes6 — chúng tôi có thể truy cập cả hai giá trị này giống như chúng tôi đã làm trước đây với PokéAPI
200 OK - success [common response to GET]
201 Created - new resource created [POST/PUT]
204 No Content - success but not content returned [not an issue]Client Error Codes
400 Bad Request - request not understood due to bad syntax [fix your JSON]
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist [or does it...]Server Error Codes
500 Internal Server Error - there's something wrong with the serverOP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter
Và có các tọa độ kinh độ và vĩ độ Đấu trường La Mã của chúng ta — thật dễ dàng
API GitHub
Chúng tôi đã thấy các yêu cầu GET, nhưng không có yêu cầu POST, PUT hoặc DELETE. Các yêu cầu này có xu hướng hơi khác một chút vì chúng tôi thường bao gồm một đối tượng
Success Codes0, đối tượng này trình bày chi tiết thông tin mà chúng tôi đang ĐĂNG, ĐẶT hoặc XÓA bằng API
200 OK - success [common response to GET]
201 Created - new resource created [POST/PUT]
204 No Content - success but not content returned [not an issue]Client Error Codes
400 Bad Request - request not understood due to bad syntax [fix your JSON]
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist [or does it...]Server Error Codes
500 Internal Server Error - there's something wrong with the serverOP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter
Đối với ví dụ này, chúng tôi sẽ sử dụng API GitHub để ĐĂNG một repo mới vào tài khoản GitHub của chúng tôi. Một lần nữa, chúng tôi cần lại khóa ủy quyền — bạn có thể tìm thấy hướng dẫn từng bước để truy cập tại đây
Tuy nhiên, có một điều là khi chọn quyền cho mã thông báo truy cập cá nhân của bạn — quyền duy nhất được yêu cầu cho hướng dẫn này là repo. Tôi cũng khuyên bạn nên tránh xa quyền delete_repo
Chúng tôi chỉ cần quyền repo
Khi bạn có khóa ủy quyền, chúng tôi sẽ sử dụng nó để xác thực tất cả các yêu cầu của chúng tôi với API GitHub như vậy
Tất cả những gì chúng tôi đã làm ở đây là yêu cầu API điển hình của chúng tôi — nhưng với khóa ủy quyền [hoặc mã thông báo] được bao gồm trong API của chúng tôi
Success Codes1. Chúng tôi có thể coi
200 OK - success [common response to GET]
201 Created - new resource created [POST/PUT]
204 No Content - success but not content returned [not an issue]Client Error Codes
400 Bad Request - request not understood due to bad syntax [fix your JSON]
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist [or does it...]Server Error Codes
500 Internal Server Error - there's something wrong with the serverOP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter
Success Codes1 là siêu dữ liệu mà chúng tôi đưa vào cùng với yêu cầu của mình
200 OK - success [common response to GET]
201 Created - new resource created [POST/PUT]
204 No Content - success but not content returned [not an issue]Client Error Codes
400 Bad Request - request not understood due to bad syntax [fix your JSON]
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist [or does it...]Server Error Codes
500 Internal Server Error - there's something wrong with the serverOP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter
Bước cuối cùng là mô tả những gì chúng tôi muốn làm. Chúng tôi sẽ làm điều này bằng cách sử dụng tham số
Success Codes3 của yêu cầu của chúng tôi. Ở đây, chúng tôi bao gồm
200 OK - success [common response to GET]
201 Created - new resource created [POST/PUT]
204 No Content - success but not content returned [not an issue]Client Error Codes
400 Bad Request - request not understood due to bad syntax [fix your JSON]
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist [or does it...]Server Error Codes
500 Internal Server Error - there's something wrong with the serverOP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter
Success Codes0, một từ điển Python được chuyển đổi thành chuỗi định dạng JSON bằng cách sử dụng
200 OK - success [common response to GET]
201 Created - new resource created [POST/PUT]
204 No Content - success but not content returned [not an issue]Client Error Codes
400 Bad Request - request not understood due to bad syntax [fix your JSON]
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist [or does it...]Server Error Codes
500 Internal Server Error - there's something wrong with the serverOP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter
Success Codes5
200 OK - success [common response to GET]
201 Created - new resource created [POST/PUT]
204 No Content - success but not content returned [not an issue]Client Error Codes
400 Bad Request - request not understood due to bad syntax [fix your JSON]
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist [or does it...]Server Error Codes
500 Internal Server Error - there's something wrong with the serverOP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter
Từ đó, chúng tôi sẽ trả về mã phản hồi 201 Đã tạo - mã này cho chúng tôi biết rằng yêu cầu đã thành công và chúng tôi đã tạo một tài nguyên mới
Để kiểm tra, chúng ta có thể vào Github
Chúng tôi sẽ tìm một repo kiểm tra api mới trên hồ sơ của bạn
Và chắc chắn, có kho lưu trữ
Success Codes6 mới của chúng tôi — có rất nhiều thứ chúng tôi có thể làm với API GitHub, hãy xem tài liệu nếu bạn quan tâm đến nhiều hơn
200 OK - success [common response to GET]
201 Created - new resource created [POST/PUT]
204 No Content - success but not content returned [not an issue]Client Error Codes
400 Bad Request - request not understood due to bad syntax [fix your JSON]
401 Unauthorized - not allowed, you need authentication
403 Forbidden - secret place, you're not allowed here
404 Not Found - you're lost, this place doesn't exist [or does it...]Server Error Codes
500 Internal Server Error - there's something wrong with the serverOP Codes
418 I'm a teapot - teapot cannot brew coffee
420 Embrace Your Calm - sending too many requests to Twitter
Ở đó, chúng tôi có phần giới thiệu về thế giới API và cách chúng tôi có thể tương tác với chúng trong Python. Từ đây vẫn còn một số lượng lớn để tìm hiểu
Cũng cần lưu ý rằng đây chỉ là một mặt của hệ sinh thái API, tất nhiên là mặt khác của việc xây dựng và phục vụ các API này - đó là một trò chơi bóng hoàn toàn khác
Tuy nhiên, việc nắm bắt các khái niệm mà chúng tôi đã đề cập trong bài viết này là nền tảng để tiếp tục và hướng lên các con đường tương tác và/hoặc phát triển API khác
Tôi hy vọng bạn thích bài viết này. Nếu bạn có bất kỳ câu hỏi nào, hãy cho tôi biết qua Twitter hoặc trong phần bình luận bên dưới. Nếu bạn muốn nhiều nội dung như thế này, tôi cũng đăng trên YouTube
Cảm ơn vì đã đọc
Nếu bạn muốn chuyển ngay sang phát triển API bằng Python, hãy xem bài viết của tôi về phát triển API với FastAPI