Lập trình mạng Python: client – server (phần 6)

Các tầng ứng dụng (tiếp tục)

Đầu ra không chính xác tương tự – bạn có thể thấy, ví dụ rằng dữ liệu JSON mã hoá kết quả
như một object cái requests đã xử lí đối với bạn như một Python dictionary. Nhưng nó là rõ
ràng rằng đoạn script này đã hoàn thành rất giống như cái đầu tiên.
Thứ đầu tiên cái bạn sẽ nhận thấy về code này là rằng semantics được cung cấp bởi pygeocoder
module mức cao hơn đã vắng mặt. Trừ phi bạn nhìn gần vào code này, bạn có thể không thấy rằng
nó yêu cầu về một mailing address. Ngược lại search1.py yêu cầu trực tiếp cho một address để
chuyển thành một latitude và longitude, code thứ hai xây dựng cả hai một base URL và một tập
các tham số truy vấn mục đích của chúng có thể không rõ ràng đối với bạn trừ phi bạn đã đọc tài
liệu của Google. Nếu bạn muốn đọc tài liệu, tiện thể, bạn có thể tìm thấy API được mô tả ở đây:

http://code.google.com/apis/maps/documentation/geocoding/

Nếu bạn nhìn gần vào dictionary của các tham số truy vấn trong search2.py, bạn sẽ thấy rằng tham số
address cung cấp mailing address cụ thể về cái bạn đang yêu cầu. Tham số khác thông báo cho Google
rằng bạn không phát hành truy vấn vị trí này vì dữ liệu được kéo sống từ một sensor vị trí thiết bị
mobile.
Khi bạn nhận một tài liệu quay trở lại như một kết quả tìm kiếm URL này,bạn thủ công gọi phương thức
response.json() để biên dịch nó như JSON và sau đó đào sâu vào cấu trúc dữ liệu kết quả nhiều tầng để
tìm ra phần tử đúng bên trong cái giữ latitude và longitude.
search2.py script sau đó làm điều tương tự như search1.py – nhưng thay vì làm như vậy trong ngôn ngữ
về addresses và latitudes, nó nói về các chi tiết xây dựng URL, lấy một trả lời, và parse nó như JSON. Đây
là sự khác biệt phổ biến khi bạn đi xuống một mức từ tầng network stack tới tầng dưới nó: trong khi high-level
code nói về một request có ý định gì, lower-level code chỉ có thể thấy các chi tiết request được xây dựng
như thế nào.

Chia sẻ

Leave a Reply

Your email address will not be published. Required fields are marked *