Hướng dẫn how do you write an api in python flask? - làm thế nào để bạn viết một api trong bình python?

Nội dung

  • Mục tiêu bài học
  • Đang cài đặt
    • Điều kiện tiên quyết
    • Cài đặt Python và bình
  • Giới thiệu API
    • API là gì?
    • Khi nào nên tạo API
    • Thuật ngữ API
  • Sử dụng API
    • Tại sao sử dụng API như một nhà nghiên cứu?
    • Một nghiên cứu trường hợp API: Chủ nghĩa giật gân và hỏa hoạn lịch sử
    • Những gì người dùng muốn trong một API
  • Thực hiện API của chúng tôi
    • Tổng quan
    • Tạo một ứng dụng bình cơ bản
    • Chạy ứng dụng
    • Bình nào làm
    • Tạo API
    • Tìm tài nguyên cụ thể
    • Hiểu API cập nhật của chúng tôi
  • Nguyên tắc thiết kế API
    • Thiết kế yêu cầu
    • Tài liệu và ví dụ
  • Kết nối API của chúng tôi với cơ sở dữ liệu
    • Hiểu API cơ sở dữ liệu của chúng tôi
    • API của chúng tôi trong thực tế
  • Tài nguyên
    • API cho các nhà nghiên cứu nhân văn
    • Tài nguyên API

Mục tiêu bài học

API Web là công cụ để làm cho chức năng thông tin và ứng dụng có thể truy cập được qua Internet. Trong bài học này, bạn sẽ:

  • Tìm hiểu API là gì và khi nào bạn nên sử dụng.
  • Tìm hiểu cách xây dựng API Web trả về dữ liệu cho người dùng.
  • Tìm hiểu một số nguyên tắc của thiết kế API tốt, áp dụng chúng vào API rút ra siêu dữ liệu từ cơ sở dữ liệu.

Đang cài đặt

Điều kiện tiên quyết

Bạn có thể sử dụng các hệ điều hành Windows, MacOS hoặc Linux để hoàn thành hướng dẫn này và một vài hướng dẫn không giống nhau trên các nền tảng sẽ được ghi nhận rõ ràng. Python 3, khung web Flask và trình duyệt web được yêu cầu cho hướng dẫn này và các hướng dẫn cài đặt cho tất cả các nền tảng được nêu dưới đây.

Kiến thức duy nhất được giả định rõ ràng cho bài học này là khả năng sử dụng trình soạn thảo văn bản, chẳng hạn như BBedit trên macOS hoặc notepad ++ trên Windows. Tuy nhiên, kiến ​​thức về dòng lệnh, python và các khái niệm web như HTTP có thể làm cho hướng dẫn này dễ thực hiện hơn. Nếu bạn mới sử dụng Python, hãy xem xét việc làm việc thông qua chuỗi nhà sử học lập trình về việc xử lý các nguồn trực tuyến để làm quen với các khái niệm cơ bản trong lập trình Python.

Cài đặt Python và bình

Giới thiệu API

API là gì?

Khi nào nên tạo API

Thuật ngữ API

python --version
pip --version

Sử dụng API

Tại sao sử dụng API như một nhà nghiên cứu?

Một nghiên cứu trường hợp API: Chủ nghĩa giật gân và hỏa hoạn lịch sử

Những gì người dùng muốn trong một API

Thực hiện API của chúng tôi

Tổng quan

Giới thiệu API

API là gì?

Khi nào nên tạo API

Thuật ngữ API

Khi nào nên tạo API

Nói chung, hãy xem xét API nếu:

  1. Bộ dữ liệu của bạn lớn, tải xuống thông qua FTP khó sử dụng hoặc tốn nhiều tài nguyên.
  2. Người dùng của bạn sẽ cần truy cập dữ liệu của bạn trong thời gian thực, chẳng hạn như để hiển thị trên một trang web khác hoặc là một phần của ứng dụng.
  3. Dữ liệu của bạn thay đổi hoặc được cập nhật thường xuyên.
  4. Người dùng của bạn chỉ cần truy cập vào một phần của dữ liệu bất cứ lúc nào.
  5. Người dùng của bạn sẽ cần thực hiện các hành động khác ngoài việc truy xuất dữ liệu, chẳng hạn như đóng góp, cập nhật hoặc xóa dữ liệu.

Nếu bạn có dữ liệu bạn muốn chia sẻ với thế giới, API là một cách bạn có thể đưa nó vào tay người khác. Tuy nhiên, API không phải lúc nào cũng là cách tốt nhất để chia sẻ dữ liệu với người dùng. Nếu kích thước của dữ liệu bạn đang cung cấp là tương đối nhỏ, thay vào đó, bạn có thể cung cấp một kết xuất dữ liệu trên mạng dưới dạng tệp JSON, XML, CSV hoặc SQLite có thể tải xuống. Tùy thuộc vào tài nguyên của bạn, phương pháp này có thể khả thi với kích thước tải xuống của một vài gigabyte.

Hãy nhớ rằng bạn có thể cung cấp cả kết xuất dữ liệu và API và người dùng cá nhân có thể tìm thấy cái này hoặc cái khác để phù hợp hơn với trường hợp sử dụng của họ. Ví dụ, thư viện mở cung cấp cả kết xuất dữ liệu và API, mỗi trường hợp phục vụ các trường hợp sử dụng khác nhau cho người dùng khác nhau.

Thuật ngữ API

Khi sử dụng hoặc xây dựng API, bạn sẽ gặp phải các thuật ngữ này thường xuyên:

  • HTTP (Giao thức chuyển siêu văn bản) là phương tiện chính để truyền đạt dữ liệu trên web. HTTP thực hiện một số phương thức của người Viking, cho biết dữ liệu hướng nào đang di chuyển và điều gì sẽ xảy ra với nó. Hai phổ biến nhất là GET, lấy dữ liệu từ một máy chủ và bài đăng, đẩy dữ liệu mới đến một máy chủ. is the primary means of communicating data on the web. HTTP implements a number of “methods,” which tell which direction data is moving and what should happen to it. The two most common are GET, which pulls data from a server, and POST, which pushes new data to a server.
  • URL (Trình định vị tài nguyên thống nhất) - Một địa chỉ cho tài nguyên trên web, chẳng hạn như
    http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire
    
    4. Một URL bao gồm một giao thức (
    http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire
    
    5), miền (
    http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire
    
    6) và đường dẫn tùy chọn (
    http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire
    
    7). Một URL mô tả vị trí của một tài nguyên cụ thể, chẳng hạn như một trang web. Khi đọc về API, bạn có thể thấy các thuật ngữ
    http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire
    
    8,
    http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire
    
    9,
    "city": [
            "Washington"
          ],
          "date": "19220730",
          "title": "The Washington Herald.",
          "end_year": 1939,
    
    0 hoặc
    "city": [
            "Washington"
          ],
          "date": "19220730",
          "title": "The Washington Herald.",
          "end_year": 1939,
    
    1 được sử dụng để mô tả các ý tưởng liền kề. Hướng dẫn này sẽ thích URL điều khoản và yêu cầu để tránh biến chứng. Bạn có thể theo dõi một URL hoặc đưa ra yêu cầu nhận trong trình duyệt của mình, vì vậy bạn đã giành được bất kỳ phần mềm đặc biệt nào để đưa ra yêu cầu trong hướng dẫn này.
    - An address for a resource on the web, such as
    http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire
    
    4. A URL consists of a protocol (
    http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire
    
    5), domain (
    http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire
    
    6), and optional path (
    http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire
    
    7). A URL describes the location of a specific resource, such as a web page. When reading about APIs, you may see the terms
    http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire
    
    8,
    http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire
    
    9,
    "city": [
            "Washington"
          ],
          "date": "19220730",
          "title": "The Washington Herald.",
          "end_year": 1939,
    
    0, or
    "city": [
            "Washington"
          ],
          "date": "19220730",
          "title": "The Washington Herald.",
          "end_year": 1939,
    
    1 used to describe adjacent ideas. This tutorial will prefer the terms URL and request to avoid complication. You can follow a URL or make a GET request in your browser, so you won’t need any special software to make requests in this tutorial.
  • JSON (ký hiệu đối tượng JavaScript) là định dạng lưu trữ dữ liệu dựa trên văn bản được thiết kế để dễ đọc cho cả người và máy móc. JSON nói chung là định dạng phổ biến nhất để trả về dữ liệu thông qua API, XML là phổ biến thứ hai. is a text-based data storage format that is designed to be easy to read for both humans and machines. JSON is generally the most common format for returning data through an API, XML being the second most common.
  • REST (Chuyển giao trạng thái đại diện) là một triết lý mô tả một số thực tiễn tốt nhất để thực hiện API. API được thiết kế với một số hoặc tất cả các nguyên tắc này trong tâm trí được gọi là API REST. Trong khi API được nêu trong bài học này sử dụng một số nguyên tắc còn lại, có rất nhiều bất đồng về thuật ngữ này. Vì lý do này, tôi không mô tả các API ví dụ ở đây là API REST, mà thay vào đó là API Web hoặc HTTP. is a philosophy that describes some best practices for implementing APIs. APIs designed with some or all of these principles in mind are called REST APIs. While the API outlined in this lesson uses some REST principles, there is a great deal of disagreement around this term. For this reason, I do not describe the example APIs here as REST APIs, but instead as web or HTTP APIs.

Sử dụng API

Tại sao sử dụng API như một nhà nghiên cứu?

Trọng tâm chính của bài học này là tạo API, không khám phá hoặc sử dụng API đã được triển khai. Tuy nhiên, trước khi chúng tôi bắt đầu xây dựng API của riêng mình, có thể hữu ích để thảo luận về cách API hữu ích cho các nhà nghiên cứu. Trong phần này, chúng tôi sẽ thấy các API có thể hữu ích như thế nào để tiếp cận các câu hỏi lịch sử, văn bản hoặc xã hội học bằng cách sử dụng phương pháp tiếp cận đọc sách vĩ mô của Hồi giáo hoặc cách sử dụng lượng thông tin tương đối lớn. Khi làm như vậy, chúng tôi sẽ làm quen với các yếu tố cơ bản của API tốt. Xem xét API từ quan điểm của người dùng sẽ hữu ích khi chúng ta bắt đầu thiết kế API của riêng mình sau này trong bài học.

Một nghiên cứu trường hợp API: Chủ nghĩa giật gân và hỏa hoạn lịch sử

Hãy tưởng tượng rằng khu vực nghiên cứu của chúng tôi là chủ nghĩa giật gân và báo chí: có thể đưa tin về các sự kiện lớn ở Hoa Kỳ trở nên ít nhiều giật gân theo thời gian không? Thu hẹp chủ đề, chúng tôi có thể hỏi liệu báo chí đưa tin, ví dụ, các vụ cháy đô thị đã tăng hoặc giảm khi chính phủ báo cáo về chi tiêu cứu trợ liên quan đến hỏa hoạn.

Mặc dù chúng tôi đã giành chiến thắng để khám phá câu hỏi này một cách kỹ lưỡng, chúng tôi có thể bắt đầu tiếp cận không gian nghiên cứu này bằng cách thu thập dữ liệu lịch sử về tin tức về các đám cháy bằng cách sử dụng API API trong trường hợp này, API báo lịch sử Mỹ ghi chép lại. API API biên niên sử cho phép truy cập vào siêu dữ liệu và văn bản cho hàng triệu trang báo được quét. Ngoài ra, không giống như nhiều API khác, nó cũng không yêu cầu quy trình xác thực, cho phép chúng tôi khám phá ngay lập tức dữ liệu có sẵn mà không cần đăng ký tài khoản.

Mục tiêu ban đầu của chúng tôi trong việc tiếp cận câu hỏi nghiên cứu này là tìm tất cả các câu chuyện trên báo trong cơ sở dữ liệu của America ghi chép sử dụng thuật ngữ Fire Fire. Thông thường, việc sử dụng API bắt đầu với tài liệu của nó. Trên trang API của America Chronicling, chúng tôi tìm thấy hai mẩu thông tin quan trọng để lấy dữ liệu chúng tôi muốn từ API: URL cơ sở của API và đường dẫn tương ứng với chức năng chúng tôi muốn thực hiện trên API trong trường hợp này, tìm kiếm cơ sở dữ liệu .base URL and the path corresponding to the function we want to perform on the API—in this case, searching the database.

URL cơ sở của chúng tôi là:

http://chroniclingamerica.loc.gov

Tất cả các yêu cầu chúng tôi thực hiện cho API phải bắt đầu với phần này của URL. Tất cả các API đều có một URL cơ sở như thế này giống nhau trên tất cả các yêu cầu đối với API.

Con đường của chúng tôi là:

Nếu chúng tôi kết hợp URL cơ sở và đường dẫn với nhau thành một URL, chúng tôi sẽ tạo yêu cầu cho API America ghi chép lại tất cả dữ liệu có sẵn trong cơ sở dữ liệu:

http://chroniclingamerica.loc.gov/search/pages/results/

Nếu bạn truy cập liên kết ở trên, bạn sẽ thấy tất cả các mục có sẵn trong biên niên sử Mỹ (12.243.633 tại thời điểm viết),, không chỉ các mục liên quan đến thuật ngữ tìm kiếm của chúng tôi, Fire Fire. Yêu cầu này cũng trả về chế độ xem HTML được định dạng, thay vì chế độ xem có cấu trúc mà chúng tôi muốn sử dụng để thu thập dữ liệu.

Theo tài liệu của Americling America, để có được dữ liệu có cấu trúc liên quan cụ thể đến lửa, chúng ta cần truyền thêm một loại dữ liệu trong yêu cầu của chúng tôi: các tham số truy vấn.query parameters.

http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire

Các tham số truy vấn tuân theo

"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
2 trong yêu cầu và được tách biệt với nhau bằng ký hiệu
"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
3. Tham số truy vấn đầu tiên,
"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
4, thay đổi dữ liệu được trả về từ HTML sang JSON. Thứ hai,
"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
5, thu hẹp các mục đã trả lại cho các mục bao gồm thuật ngữ tìm kiếm của chúng tôi.

Nếu bạn theo liên kết trên trong trình duyệt của mình, bạn sẽ thấy một danh sách có cấu trúc các mục trong cơ sở dữ liệu liên quan đến thuật ngữ tìm kiếm. Định dạng của dữ liệu được trả về được gọi là JSON và là một định dạng có cấu trúc trông giống như đoạn trích này từ kết quả của America ghi chép:

"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,

Bằng cách thực hiện các yêu cầu cho API America ghi chép, chúng tôi đã truy cập thông tin về các câu chuyện tin tức có chứa thuật ngữ tìm kiếm, lửa và dữ liệu được trả về bao gồm ngày xuất bản và trang mà bài báo xuất hiện. Nếu chúng ta theo đuổi câu hỏi nghiên cứu này hơn nữa, một bước tiếp theo có thể là tìm ra có bao nhiêu câu chuyện liên quan đến lửa xuất hiện trên trang nhất trên báo theo thời gian, hoặc có thể làm sạch dữ liệu để giảm số lượng dương tính giả. Tuy nhiên, như chúng ta đã thấy, khám phá API có thể là bước đầu tiên hữu ích trong việc thu thập dữ liệu để giải quyết một câu hỏi nghiên cứu.

Lưu ý rằng trong phần này, chúng tôi đã bỏ qua một bước quan trọng: tìm một API thích hợp ở nơi đầu tiên. Một số tài nguyên để nghiên cứu API có sẵn vào cuối bài học này.

Những gì người dùng muốn trong một API

Như chúng tôi đã học, tài liệu là nơi bắt đầu của người dùng khi làm việc với API mới và các URL được thiết kế tốt giúp người dùng dễ dàng tìm thấy tài nguyên dễ dàng hơn. Bởi vì họ giúp người dùng nhanh chóng truy cập thông tin thông qua API của bạn, các yếu tố này là tài liệu và các URL được hình thành tốt là Sine qua không phải là API tốt. Chúng tôi sẽ thảo luận về các yếu tố này ở độ sâu lớn hơn sau này trong hướng dẫn này.

Khi bạn sử dụng các API khác trong nghiên cứu của mình, bạn sẽ phát triển ý thức về những gì tạo ra API tốt từ góc độ của người dùng tiềm năng. Giống như các độc giả mạnh mẽ thường tạo ra các nhà văn mạnh mẽ, sử dụng API được tạo bởi những người khác và đánh giá nghiêm túc việc thực hiện và tài liệu của họ sẽ giúp bạn thiết kế tốt hơn API của riêng bạn.

Thực hiện API của chúng tôi

Tổng quan

Phần này sẽ chỉ cho bạn cách xây dựng API nguyên mẫu bằng Python và khung web Flask. API ví dụ của chúng tôi sẽ ở dạng lưu trữ đọc sách xa, một danh mục sách vượt xa thông tin thư mục tiêu chuẩn để bao gồm dữ liệu quan tâm đến những người làm việc trên các dự án kỹ thuật số. Trong trường hợp này, bên cạnh tiêu đề và ngày xuất bản, API của chúng tôi cũng sẽ phục vụ câu đầu tiên của mỗi cuốn sách. Điều này là đủ dữ liệu để cho phép chúng tôi hình dung một số câu hỏi nghiên cứu tiềm năng mà không áp đảo chúng tôi khi chúng tôi tập trung vào thiết kế API của chúng tôi.

Chúng tôi sẽ bắt đầu bằng cách sử dụng bình để tạo trang chủ cho trang web của chúng tôi. Trong bước này, chúng tôi sẽ tìm hiểu những điều cơ bản về cách Flask hoạt động và đảm bảo phần mềm của chúng tôi được cấu hình chính xác. Khi chúng tôi có một ứng dụng bình nhỏ hoạt động dưới dạng trang chủ, chúng tôi sẽ lặp lại trên trang web này, biến nó thành API hoạt động.

Tạo một ứng dụng bình cơ bản

Flask là một khung web cho Python, có nghĩa là nó cung cấp chức năng để xây dựng các ứng dụng web, bao gồm quản lý các yêu cầu HTTP và hiển thị các mẫu. Trong phần này, chúng tôi sẽ tạo một ứng dụng bình cơ bản. Trong các phần sau, chúng tôi sẽ thêm vào ứng dụng này để tạo API của chúng tôi. Don Tiết lo lắng nếu bạn không hiểu từng dòng mã riêng lẻ nhưng việc giải thích trên mạng sẽ xuất hiện khi bạn có phiên bản đầu tiên của ứng dụng hoạt động.

Tại sao bình?

Python có một số khung web có thể được sử dụng để tạo ứng dụng web và API. Nổi tiếng nhất là Django, một khung có cấu trúc dự án đã thiết lập và bao gồm nhiều công cụ tích hợp. Điều này có thể tiết kiệm thời gian và nỗ lực cho các lập trình viên có kinh nghiệm, nhưng có thể quá sức. Các ứng dụng bình có xu hướng được viết trên một tấm bạt trống, có thể nói, và do đó phù hợp hơn với một ứng dụng chứa như API nguyên mẫu của chúng tôi.

Đầu tiên, tạo một thư mục mới trên máy tính của bạn sẽ đóng vai trò là thư mục dự án. Điều này có thể nằm trong thư mục

"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
6 của bạn, nhưng tôi khuyên bạn nên tạo một thư mục
"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
7 chuyên dụng cho các dự án này và các dự án tương tự. Hướng dẫn này sẽ giả định rằng các tệp liên quan đến bài học này sẽ được lưu trữ trong một thư mục có tên
"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
8 bên trong một thư mục có tên
"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
7 trong thư mục nhà của bạn. Nếu bạn cần trợ giúp với điều hướng trên dòng lệnh, hãy xem Giới thiệu của nhà sử học lập trình về dòng lệnh BASH cho dòng lệnh MacOS và Linux hoặc giới thiệu dòng lệnh Windows với PowerShell cho Windows.

Trong MacOS, bạn có thể trực tiếp tạo thư mục

"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
8 bên trong thư mục
"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
7 trong thư mục nhà của bạn với lệnh thiết bị đầu cuối này:

Trên Windows, bạn có thể tạo thư mục

"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
8 với các lệnh này trong môi trường dòng lệnh
http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire
2 của bạn:

md projects
cd projects
md api

Bạn cũng có thể tạo các thư mục

"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
7 và
"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
8 bằng cách sử dụng giao diện người dùng đồ họa hệ điều hành của bạn.

Tiếp theo, mở trình soạn thảo văn bản (chẳng hạn như Notepad ++ hoặc BBedit) và nhập mã sau:

import flask

app = flask.Flask(__name__)
app.config["DEBUG"] = True


@app.route('/', methods=['GET'])
def home():
    return "<h2>Distant Reading Archive</h2><p>This site is a prototype API for distant reading of science fiction novels.</p>"

app.run()

Lưu mã này dưới dạng

md projects
cd projects
md api
6 trong thư mục
"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
8 bạn đã tạo cho hướng dẫn này.

Chạy ứng dụng

Trong dòng lệnh, điều hướng đến thư mục

"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
8 của bạn:

Bạn có thể kiểm tra xem bạn có trong đúng thư mục bằng cách chạy lệnh

md projects
cd projects
md api
9 không. Khi bạn có trong thư mục dự án của mình, hãy chạy ứng dụng Flask với lệnh:

Bạn sẽ thấy đầu ra tương tự như thế này:

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Bạn cũng có thể thấy một số dòng liên quan đến gỡ lỗi. Thông báo này có nghĩa là Flask đang chạy ứng dụng của bạn cục bộ (trên máy tính của bạn) tại địa chỉ đó. Theo liên kết ở trên, http://127.0.0.1:5000/, sử dụng trình duyệt web của bạn để xem ứng dụng đang chạy:

Hướng dẫn how do you write an api in python flask? - làm thế nào để bạn viết một api trong bình python?

Trang chủ khi được hiển thị trong trình duyệt.

Xin chúc mừng, bạn đã tạo ra một ứng dụng web hoạt động!

Bình nào làm

Bây giờ chúng tôi có một trang chủ cho kho lưu trữ của chúng tôi, hãy để nói về cách Flask hoạt động và những gì mã trên đang làm.

Bản đồ bình Bản HTTP yêu cầu các chức năng Python. Trong trường hợp này, chúng tôi đã ánh xạ một đường dẫn URL (‘

import flask

app = flask.Flask(__name__)
app.config["DEBUG"] = True


@app.route('/', methods=['GET'])
def home():
    return "<h2>Distant Reading Archive</h2><p>This site is a prototype API for distant reading of science fiction novels.</p>"

app.run()
0,) vào một hàm,
import flask

app = flask.Flask(__name__)
app.config["DEBUG"] = True


@app.route('/', methods=['GET'])
def home():
    return "<h2>Distant Reading Archive</h2><p>This site is a prototype API for distant reading of science fiction novels.</p>"

app.run()
1. Khi chúng tôi kết nối với máy chủ Flask tại http://127.0.0.1:5000/, Flask kiểm tra xem có sự phù hợp giữa đường dẫn được cung cấp và chức năng xác định. Kể từ
import flask

app = flask.Flask(__name__)
app.config["DEBUG"] = True


@app.route('/', methods=['GET'])
def home():
    return "<h2>Distant Reading Archive</h2><p>This site is a prototype API for distant reading of science fiction novels.</p>"

app.run()
0 hoặc không có đường dẫn được cung cấp bổ sung, đã được ánh xạ vào hàm
import flask

app = flask.Flask(__name__)
app.config["DEBUG"] = True


@app.route('/', methods=['GET'])
def home():
    return "<h2>Distant Reading Archive</h2><p>This site is a prototype API for distant reading of science fiction novels.</p>"

app.run()
1, bình chạy mã trong hàm và hiển thị kết quả được trả về trong trình duyệt. Trong trường hợp này, kết quả được trả lại là đánh dấu HTML cho một trang chủ chào đón khách truy cập vào trang web lưu trữ API của chúng tôi.

Quá trình ánh xạ URL đến các chức năng được gọi là định tuyến. Cácrouting. The

@app.route('/', methods=['GET'])

Cú pháp là một phần của chương trình cho phép Flask biết rằng hàm này,

import flask

app = flask.Flask(__name__)
app.config["DEBUG"] = True


@app.route('/', methods=['GET'])
def home():
    return "<h2>Distant Reading Archive</h2><p>This site is a prototype API for distant reading of science fiction novels.</p>"

app.run()
1, nên được ánh xạ tới đường dẫn
import flask

app = flask.Flask(__name__)
app.config["DEBUG"] = True


@app.route('/', methods=['GET'])
def home():
    return "<h2>Distant Reading Archive</h2><p>This site is a prototype API for distant reading of science fiction novels.</p>"

app.run()
0. Danh sách
import flask

app = flask.Flask(__name__)
app.config["DEBUG"] = True


@app.route('/', methods=['GET'])
def home():
    return "<h2>Distant Reading Archive</h2><p>This site is a prototype API for distant reading of science fiction novels.</p>"

app.run()
6 (
import flask

app = flask.Flask(__name__)
app.config["DEBUG"] = True


@app.route('/', methods=['GET'])
def home():
    return "<h2>Distant Reading Archive</h2><p>This site is a prototype API for distant reading of science fiction novels.</p>"

app.run()
7) là một đối số từ khóa cho phép Flask biết loại yêu cầu HTTP nào được cho phép. Chúng tôi chỉ sử dụng các yêu cầu
import flask

app = flask.Flask(__name__)
app.config["DEBUG"] = True


@app.route('/', methods=['GET'])
def home():
    return "<h2>Distant Reading Archive</h2><p>This site is a prototype API for distant reading of science fiction novels.</p>"

app.run()
8 trong hướng dẫn này, nhưng nhiều ứng dụng web cần sử dụng cả hai yêu cầu
import flask

app = flask.Flask(__name__)
app.config["DEBUG"] = True


@app.route('/', methods=['GET'])
def home():
    return "<h2>Distant Reading Archive</h2><p>This site is a prototype API for distant reading of science fiction novels.</p>"

app.run()
8 (để gửi dữ liệu từ ứng dụng cho người dùng) và
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
0 yêu cầu (để nhận dữ liệu từ người dùng).

Dưới đây là những giải thích ngắn gọn về các thành phần khác của ứng dụng:

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
1 - Nhập thư viện bình, cung cấp mã cho phần còn lại của ứng dụng.

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
2 - Tạo đối tượng ứng dụng Flask, chứa dữ liệu về ứng dụng và cả các phương thức (hàm đối tượng) cho ứng dụng thực hiện một số hành động nhất định. Dòng cuối cùng,
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
3, là một trong những phương pháp như vậy.

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
4 - Bắt đầu trình gỡ lỗi. Với dòng này, nếu mã của bạn bị dị dạng, bạn sẽ thấy lỗi khi bạn truy cập ứng dụng của mình. Nếu không, bạn sẽ chỉ thấy một thông báo chung như
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
5 trong trình duyệt khi có vấn đề với mã của bạn.

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
3 - Một phương thức chạy máy chủ ứng dụng.

Mặc dù nó rất hữu ích khi có một sự quen thuộc với những gì mà diễn ra trong kịch bản, nhưng đừng lo lắng nếu bạn không hiểu chính xác những gì mọi yếu tố đang làm trong giai đoạn này. Nếu bạn hiểu phác thảo chung về cách thức hoạt động của phần này, các chi tiết về cách bình hiển thị các trang có thể trở nên dễ hiểu hơn khi chúng tôi tiếp tục phát triển API của mình.

Tạo API

Bây giờ chúng tôi có một ứng dụng bình chạy và biết một chút về những gì mà bình làm, cuối cùng chúng tôi đã sẵn sàng để thực hiện một API nhỏ với dữ liệu mà chúng tôi sẽ xác định ngay trong ứng dụng của mình.

Chúng tôi sẽ thêm dữ liệu của chúng tôi làm danh sách các từ điển Python. Từ điển trong các cặp khóa và giá trị nhóm Python, như thế này:

{
    'key': 'value',
    'key': 'value'
}

Khóa xác định loại thông tin được biểu thị, chẳng hạn như

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
7 hoặc
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
8. Giá trị là dữ liệu thực tế. Ví dụ, một danh bạ điện thoại ngắn có thể có định dạng này:

http://chroniclingamerica.loc.gov
0

Danh bạ điện thoại trên là danh sách hai từ điển. Mỗi từ điển là một mục nhập danh sách điện thoại bao gồm hai khóa,

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
9 và
@app.route('/', methods=['GET'])
0, mỗi khóa được ghép với một giá trị cung cấp thông tin thực tế.

Hãy để thêm một số dữ liệu (các mục trên ba tiểu thuyết khoa học viễn tưởng) làm danh sách các từ điển. Mỗi từ điển sẽ chứa số ID, tiêu đề, tác giả, câu đầu tiên và năm xuất bản cho mỗi cuốn sách. Cuối cùng, chúng tôi sẽ thêm một chức năng mới: một tuyến đường cho phép khách truy cập truy cập dữ liệu của chúng tôi.

Thay thế mã trước đó của chúng tôi trong

md projects
cd projects
md api
6 bằng mã bên dưới:

http://chroniclingamerica.loc.gov
1

Chạy mã (điều hướng đến thư mục

"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
8 của bạn trong dòng lệnh và nhập
@app.route('/', methods=['GET'])
3). Khi máy chủ đang chạy, hãy truy cập URL tuyến đường của chúng tôi để xem dữ liệu trong danh mục:

http://127.0.0.1:5000/api/v1/resources/books/all

Bạn sẽ thấy đầu ra JSON cho ba mục trong danh mục thử nghiệm của chúng tôi. Flask cung cấp cho chúng tôi chức năng

@app.route('/', methods=['GET'])
4 cho phép chúng tôi chuyển đổi danh sách và từ điển sang định dạng JSON. Trong tuyến đường chúng tôi đã tạo, các mục sách của chúng tôi được chuyển đổi từ danh sách các từ điển Python thành JSON trước khi được trả lại cho người dùng.

Tại thời điểm này, bạn đã tạo ra một API làm việc, nếu có giới hạn. Trong phần tiếp theo, chúng tôi sẽ cho phép người dùng tìm sách thông qua dữ liệu cụ thể hơn, chẳng hạn như ID mục nhập.

Tìm tài nguyên cụ thể

Ngay bây giờ, người dùng chỉ có thể xem toàn bộ cơ sở dữ liệu của chúng tôi, họ có thể lọc hoặc tìm tài nguyên cụ thể. Mặc dù đây không phải là vấn đề với danh mục thử nghiệm của chúng tôi, nhưng điều này sẽ nhanh chóng trở nên ít hữu ích hơn khi chúng tôi thêm dữ liệu. Trong phần này, chúng tôi sẽ thêm một chức năng cho phép người dùng lọc kết quả trả lại của họ bằng một yêu cầu cụ thể hơn.

Dưới đây là mã cho ứng dụng mới của chúng tôi với khả năng lọc. Như trước đây, chúng tôi sẽ kiểm tra mã cẩn thận hơn khi bạn chạy nó.

http://chroniclingamerica.loc.gov
2

Khi bạn đã cập nhật API của mình với chức năng

@app.route('/', methods=['GET'])
5, hãy chạy mã của bạn như trước (
@app.route('/', methods=['GET'])
3 từ thư mục
"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
8 của bạn) và truy cập các URL dưới đây để kiểm tra khả năng lọc mới:

127.0.0.1:5000/api/v1/resource/books?id=0 127.0.0.1:5000/api/v1/resource/books?id=1 127.0.0.1:5000/api/v1/resource/books?id= 2 127.0.0.1:5000/api/v1/resource/books?id=3

Mỗi trong số này sẽ trả về một mục khác nhau, ngoại trừ phần cuối cùng, sẽ trả lại một danh sách trống:

@app.route('/', methods=['GET'])
8, vì không có cuốn sách nào mà giá trị ID là 3. (Đếm trong lập trình thường bắt đầu từ 0, vì vậy id = 3 sẽ Hãy là một yêu cầu cho mục thứ tư không tồn tại.) Trong phần tiếp theo, chúng tôi sẽ khám phá API được cập nhật của chúng tôi chi tiết hơn.

Hiểu API cập nhật của chúng tôi

Trong mã này, trước tiên chúng tôi tạo một hàm mới, được gọi là

@app.route('/', methods=['GET'])
5, với cú pháp
{
    'key': 'value',
    'key': 'value'
}
0 ánh xạ hàm vào đường dẫn
{
    'key': 'value',
    'key': 'value'
}
1. Điều đó có nghĩa là chức năng này sẽ chạy khi chúng ta truy cập http://127.0.0.1:5000/api/v1/resource/books. (Lưu ý rằng việc truy cập liên kết này mà không cung cấp ID sẽ cung cấp thông báo lỗi mà chúng tôi đã cung cấp trong mã:
{
    'key': 'value',
    'key': 'value'
}
2)

Bên trong chức năng của chúng tôi, chúng tôi làm hai điều:

Đầu tiên, kiểm tra URL được cung cấp cho ID và chọn các cuốn sách phù hợp với ID đó. ID phải được cung cấp như thế này:

{
    'key': 'value',
    'key': 'value'
}
3. Dữ liệu được truyền qua các URL như thế này (sau
"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
2) được gọi là các tham số truy vấn, chúng tôi đã thấy chúng trước khi chúng tôi làm việc với API của America Reconring. Chúng là một tính năng của HTTP được sử dụng để lọc cho các loại dữ liệu cụ thể.query parameters—we’ve seen them before when we worked with the Chronicling America API. They’re a feature of HTTP used for filtering for specific kinds of data.

Phần này của mã xác định nếu có tham số truy vấn, như

{
    'key': 'value',
    'key': 'value'
}
3, sau đó gán ID được cung cấp cho một biến.

http://chroniclingamerica.loc.gov
3

Sau đó, phần này di chuyển qua danh mục sách thử nghiệm của chúng tôi, khớp với những cuốn sách có ID được cung cấp và nối chúng vào danh sách sẽ được trả lại cho người dùng:

http://chroniclingamerica.loc.gov
4

Cuối cùng, dòng

{
    'key': 'value',
    'key': 'value'
}
6 lấy danh sách các kết quả và hiển thị chúng trong trình duyệt là JSON.

Nếu bạn đã nhận được đến nay, bạn đã tạo ra một API thực sự. Kỉ niệm! Vào cuối bài học này, bạn sẽ được tiếp xúc với API phức tạp hơn sử dụng cơ sở dữ liệu, nhưng hầu hết các nguyên tắc và mẫu mà chúng tôi đã sử dụng cho đến nay vẫn sẽ được áp dụng. Trong phần tiếp theo, chúng tôi sẽ thảo luận về một số hướng dẫn để tạo API được thiết kế tốt mà những người khác thực sự sẽ muốn sử dụng. Trong phần cuối cùng của hướng dẫn, chúng tôi sẽ áp dụng các nguyên tắc này vào phiên bản API của chúng tôi có kết quả từ cơ sở dữ liệu.

Nguyên tắc thiết kế API

Cho đến nay, chúng tôi đã tạo ra một API hoạt động với dữ liệu thử nghiệm mà chúng tôi đã cung cấp ngay trong ứng dụng của chúng tôi. Phiên bản tiếp theo của chúng tôi về API của chúng tôi sẽ lấy dữ liệu từ cơ sở dữ liệu trước khi cung cấp cho người dùng. Nó cũng sẽ lấy các tham số truy vấn bổ sung, cho phép người dùng lọc theo các trường khác ngoài ID.

Trước khi xây dựng nhiều chức năng hơn trong ứng dụng của chúng tôi, hãy để Lừa phản ánh về một số quyết định thiết kế API mà chúng tôi đã đưa ra cho đến nay. Hai khía cạnh của API tốt là khả năng sử dụng và khả năng bảo trì, và khi chúng tôi xây dựng nhiều chức năng hơn vào API của mình, chúng tôi sẽ ghi nhớ nhiều cân nhắc sau đây.

Thiết kế yêu cầu

Triết lý thiết kế phổ biến của API hiện đại được gọi là phần còn lại. Đối với mục đích của chúng tôi, điều quan trọng nhất về phần còn lại là nó dựa trên bốn phương pháp được xác định bởi giao thức HTTP: Post, Get, Put và Delete. Chúng tương ứng với bốn hành động truyền thống được thực hiện trên dữ liệu trong cơ sở dữ liệu: tạo, đọc, cập nhật và xóa. Trong hướng dẫn này, chúng tôi chỉ quan tâm đến các yêu cầu GET, tương ứng với việc đọc từ cơ sở dữ liệu.

Bởi vì các yêu cầu HTTP rất không thể thiếu đối với việc sử dụng API REST, nhiều nguyên tắc thiết kế xoay quanh cách các yêu cầu nên được định dạng. Chúng tôi đã tạo một yêu cầu HTTP, trả về tất cả các cuốn sách được cung cấp trong dữ liệu mẫu của chúng tôi. Để hiểu các cân nhắc đi vào định dạng yêu cầu này, trước tiên, hãy xem xét một ví dụ yếu hoặc được thiết kế kém về điểm cuối API:

http://chroniclingamerica.loc.gov
5

Định dạng của yêu cầu này có một số vấn đề. Đầu tiên là ngữ nghĩa trong API REST, các động từ của chúng tôi thường là

import flask

app = flask.Flask(__name__)
app.config["DEBUG"] = True


@app.route('/', methods=['GET'])
def home():
    return "<h2>Distant Reading Archive</h2><p>This site is a prototype API for distant reading of science fiction novels.</p>"

app.run()
8,
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
0,
{
    'key': 'value',
    'key': 'value'
}
9 hoặc
http://chroniclingamerica.loc.gov
00 và được xác định bằng phương thức yêu cầu thay vì trong URL yêu cầu. Điều đó có nghĩa là từ mà Get Get không nên xuất hiện trong yêu cầu của chúng tôi, vì đó là Get Get được ngụ ý bởi thực tế là chúng tôi sử dụng phương thức HTTP GET. Ngoài ra, các bộ sưu tập tài nguyên như
http://chroniclingamerica.loc.gov
01 hoặc
http://chroniclingamerica.loc.gov
02 nên được biểu thị bằng các danh từ số nhiều. Điều này cho thấy rõ khi API đề cập đến một bộ sưu tập (
http://chroniclingamerica.loc.gov
01) hoặc mục nhập (
http://chroniclingamerica.loc.gov
04). Kết hợp các nguyên tắc này, API của chúng tôi sẽ trông như thế này:

http://chroniclingamerica.loc.gov
6

Yêu cầu trên sử dụng một phần của đường dẫn (

http://chroniclingamerica.loc.gov
05) để cung cấp ID. Mặc dù đây không phải là một cách tiếp cận hiếm gặp, nhưng nó có phần không linh hoạt với các URL được xây dựng theo cách này, bạn thường chỉ có thể lọc theo một trường tại một thời điểm. Các tham số truy vấn cho phép lọc bởi nhiều trường cơ sở dữ liệu và có ý nghĩa hơn khi cung cấp dữ liệu tùy chọn của Cameron, chẳng hạn như định dạng đầu ra:

http://chroniclingamerica.loc.gov
7

Khi thiết kế cách các yêu cầu cho API của bạn nên được cấu trúc, nó cũng có ý nghĩa để lập kế hoạch cho các bổ sung trong tương lai. Ngay cả khi phiên bản API hiện tại của bạn chỉ phục vụ thông tin về một loại tài nguyên, ví dụ,, ví dụ, có ý nghĩa khi lập kế hoạch như thể bạn có thể thêm các tài nguyên khác hoặc chức năng không tài nguyên vào API của bạn trong tương lai:

http://chroniclingamerica.loc.gov
8

Việc thêm một phân đoạn bổ sung trên đường dẫn của bạn, chẳng hạn như các tài nguyên của các tài nguyên hoặc các mục nhập, cung cấp cho bạn tùy chọn để cho phép người dùng tìm kiếm trên tất cả các tài nguyên có sẵn, giúp bạn dễ dàng hơn trong các yêu cầu hỗ trợ sau này như sau:

http://chroniclingamerica.loc.gov
9

Một cách khác để lập kế hoạch cho tương lai API của bạn là thêm một số phiên bản vào đường dẫn. Điều này có nghĩa là, nếu bạn phải thiết kế lại API của mình, bạn có thể tiếp tục hỗ trợ phiên bản cũ của API theo số phiên bản cũ trong khi phát hành, ví dụ, phiên bản thứ hai (

http://chroniclingamerica.loc.gov
07) với chức năng được cải thiện hoặc khác nhau. Bằng cách này, các ứng dụng và tập lệnh được xây dựng bằng phiên bản cũ của API của bạn đã không ngừng hoạt động sau khi nâng cấp của bạn.

Sau khi kết hợp các cải tiến thiết kế này, một yêu cầu cho API của chúng tôi có thể trông như thế này:

http://chroniclingamerica.loc.gov/search/pages/results/
0

Tài liệu và ví dụ

Không có tài liệu, ngay cả API được thiết kế tốt nhất cũng không thể sử dụng được. API của bạn nên có tài liệu mô tả các tài nguyên hoặc chức năng có sẵn thông qua API của bạn cũng cung cấp các ví dụ làm việc cụ thể về URL yêu cầu hoặc mã cho API của bạn. Bạn nên có một phần cho mỗi tài nguyên mô tả các trường nào, chẳng hạn như

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
8 hoặc
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
7, nó chấp nhận. Mỗi phần phải có một ví dụ dưới dạng yêu cầu HTTP hoặc khối mã mẫu.

Một thông lệ khá phổ biến trong tài liệu API là cung cấp các chú thích trong mã của bạn sau đó được tự động đối chiếu vào tài liệu bằng cách sử dụng một công cụ như Doxygen hoặc Sphinx. Các công cụ này tạo ra tài liệu từ DocStrings, thành phần bạn thực hiện trên các định nghĩa chức năng của mình. Mặc dù loại tài liệu này là một ý tưởng tốt, nhưng bạn không nên xem xét công việc của mình nếu bạn chỉ ghi lại API của mình lên cấp độ này. Thay vào đó, hãy cố gắng tưởng tượng mình là người dùng tiềm năng API của bạn và cung cấp các ví dụ làm việc. Trong một thế giới lý tưởng, bạn sẽ có ba loại tài liệu cho API của mình: một tài liệu tham khảo chi tiết từng tuyến và hành vi của nó, một hướng dẫn giải thích tài liệu tham khảo trong văn xuôi và ít nhất một hoặc hai hướng dẫn giải thích chi tiết từng bước.docstrings—comments you make on your function definitions. While this kind of documentation is a good idea, you shouldn’t consider your job done if you’ve only documented your API to this level. Instead, try to imagine yourself as a potential user of your API and provide working examples. In an ideal world, you would have three kinds of documentation for your API: a reference that details each route and its behavior, a guide that explains the reference in prose, and at least one or two tutorials that explain every step in detail.

Để biết cảm hứng về cách tiếp cận tài liệu API, hãy xem API Bộ sưu tập kỹ thuật số của Thư viện Công cộng New York, nơi đặt ra một tiêu chuẩn tài liệu có thể đạt được cho nhiều dự án học thuật. Để biết API được ghi chép rộng rãi (mặc dù đôi khi áp đảo), hãy xem API hành động MediaWiki, cung cấp tài liệu cho người dùng truyền truy vấn một phần cho API. .

Kết nối API của chúng tôi với cơ sở dữ liệu

Ví dụ cuối cùng này về API lưu trữ đọc xa của chúng tôi rút dữ liệu từ cơ sở dữ liệu, thực hiện xử lý lỗi và có thể lọc sách theo ngày xuất bản. Cơ sở dữ liệu được sử dụng là SQLite, một công cụ cơ sở dữ liệu nhẹ được hỗ trợ trong Python theo mặc định. Các tệp SQLite thường kết thúc với phần mở rộng tệp

http://chroniclingamerica.loc.gov
10.

Trước khi chúng tôi sửa đổi mã của mình, trước tiên hãy tải xuống cơ sở dữ liệu ví dụ từ vị trí này và sao chép tệp vào thư mục

"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
8 của bạn bằng giao diện người dùng đồ họa của bạn. Phiên bản cuối cùng của API của chúng tôi sẽ truy vấn cơ sở dữ liệu này khi trả lại kết quả cho người dùng.

Sao chép mã dưới đây vào trình soạn thảo văn bản của bạn. Như trước đây, chúng tôi sẽ kiểm tra mã chặt chẽ hơn khi bạn chạy nó.

http://chroniclingamerica.loc.gov/search/pages/results/
1

Lưu mã dưới dạng

http://chroniclingamerica.loc.gov
12 trong thư mục
"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
8 của bạn và chạy nó bằng cách điều hướng đến thư mục dự án của bạn trong thiết bị đầu cuối và nhập lệnh:

Lưu ý rằng nếu phiên bản trước của mã vẫn đang chạy, trước tiên bạn sẽ cần kết thúc quy trình đó bằng cách nhấn

http://chroniclingamerica.loc.gov
14 trước khi thực thi mã mới. Khi ví dụ này đang chạy, hãy thử chức năng lọc với các yêu cầu HTTP này:

http://127.0.0.1:5000/api/v1/resource/books/all http://127.0.0.1:5000/api/v1/resource/books?Author=connie+willis http:/127.0.0.0.0.0.0.0.0.0 5000/API/V1/Tài nguyên/Sách? Tác giả = Connie+Willis & xuất bản = 1999 http://127.0.0.1:5000/api/v1/resource/books?published=2010

Cơ sở dữ liệu được tải xuống cho bài học này có 67 mục, một cho mỗi người chiến thắng giải thưởng Hugo cho tiểu thuyết khoa học viễn tưởng hay nhất từ ​​năm 1953 đến 2014 (tránh tranh cãi bỏ phiếu năm 2015). Bộ dữ liệu bao gồm tiêu đề tiểu thuyết, tác giả, năm xuất bản và câu đầu tiên. API của chúng tôi cho phép người dùng lọc theo ba trường:

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
8,
http://chroniclingamerica.loc.gov
16 (năm xuất bản) và
http://chroniclingamerica.loc.gov
17.

Yêu cầu đầu tiên trả về tất cả các mục trong cơ sở dữ liệu, tương tự như yêu cầu

http://chroniclingamerica.loc.gov
18 mà chúng tôi đã triển khai cho phiên bản cuối cùng của API của chúng tôi. Yêu cầu thứ hai trả về tất cả các cuốn sách của tác giả Connie Willis (
http://chroniclingamerica.loc.gov
19). Lưu ý rằng, trong một tham số truy vấn, khoảng cách giữa các từ được ký hiệu bằng một dấu
http://chroniclingamerica.loc.gov
20, do đó
http://chroniclingamerica.loc.gov
21. Các bộ lọc yêu cầu thứ ba theo hai lĩnh vực của tác giả và năm xuất bản. Thay vì ba cuốn sách được trả lại bằng cách yêu cầu
http://chroniclingamerica.loc.gov
19, yêu cầu này chỉ trả về cuốn sách Doomsday, được xuất bản năm 1993. Yêu cầu cuối cùng trả lại tất cả những người chiến thắng Hugo từ năm 2010 (lưu ý rằng, trong một số năm, hơn một Hugo được trao ).

Như chúng ta có thể thấy phiên bản API này phục vụ số lượng kết quả lớn hơn, kết quả được lưu trữ trong cơ sở dữ liệu SQLite (

http://chroniclingamerica.loc.gov
23). Khi người dùng của chúng tôi yêu cầu một mục nhập hoặc tập hợp các mục, API của chúng tôi sẽ lấy thông tin đó từ cơ sở dữ liệu bằng cách xây dựng và thực hiện truy vấn SQL. Việc lặp lại API của chúng tôi cũng cho phép lọc bằng nhiều trường. Chúng tôi sẽ thảo luận về việc sử dụng tiềm năng cho chức năng này sau khi kiểm tra mã của chúng tôi chặt chẽ hơn.

Hiểu API cơ sở dữ liệu của chúng tôi

Cơ sở dữ liệu quan hệ cho phép lưu trữ và truy xuất dữ liệu, được lưu trữ trong các bảng. Các bảng tương tự như các tờ trải rộng ở chỗ chúng có các cột và hàng của các màu sắc cho biết dữ liệu đại diện cho những gì, chẳng hạn như tiêu đề của Hồi giáo hoặc ngày. Hàng đại diện cho các mục riêng lẻ, có thể là sách, người dùng, giao dịch hoặc bất kỳ loại thực thể nào khác.

Cơ sở dữ liệu mà chúng tôi làm việc có năm cột

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
8,
http://chroniclingamerica.loc.gov
16,
http://chroniclingamerica.loc.gov
17,
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
7 và
http://chroniclingamerica.loc.gov
28. Mỗi hàng đại diện cho một cuốn sách giành giải thưởng Hugo trong năm dưới tiêu đề
http://chroniclingamerica.loc.gov
16 và văn bản bắt đầu với câu trong cột
http://chroniclingamerica.loc.gov
28.

Thay vì sử dụng dữ liệu kiểm tra được xác định trong ứng dụng, chức năng

http://chroniclingamerica.loc.gov
31 của chúng tôi lấy dữ liệu từ cơ sở dữ liệu Hugo của chúng tôi:

http://chroniclingamerica.loc.gov/search/pages/results/
2

Đầu tiên, chúng tôi kết nối với cơ sở dữ liệu bằng thư viện

http://chroniclingamerica.loc.gov
32 của chúng tôi. Một đối tượng đại diện cho kết nối với cơ sở dữ liệu được liên kết với biến
http://chroniclingamerica.loc.gov
33. Dòng
http://chroniclingamerica.loc.gov
34 cho phép đối tượng kết nối biết sử dụng hàm
http://chroniclingamerica.loc.gov
35 mà chúng tôi đã xác định, trả lại các mục từ cơ sở dữ liệu dưới dạng từ điển thay vì liệt kê các tác phẩm này hoạt động tốt hơn khi chúng tôi đưa chúng vào JSON. Sau đó, chúng tôi tạo một đối tượng con trỏ (
http://chroniclingamerica.loc.gov
36), đây là đối tượng thực sự di chuyển qua cơ sở dữ liệu để lấy dữ liệu của chúng tôi. Cuối cùng, chúng tôi thực hiện truy vấn SQL với phương thức
http://chroniclingamerica.loc.gov
37 để rút tất cả dữ liệu có sẵn (
http://chroniclingamerica.loc.gov
38) từ bảng
http://chroniclingamerica.loc.gov
01 của cơ sở dữ liệu của chúng tôi. Vào cuối chức năng của chúng tôi, dữ liệu này được trả về dưới dạng JSON:
http://chroniclingamerica.loc.gov
40. Lưu ý rằng chức năng khác của chúng tôi trả về dữ liệu,
http://chroniclingamerica.loc.gov
41, sẽ sử dụng một cách tiếp cận tương tự để rút dữ liệu từ cơ sở dữ liệu.

Mục đích của chức năng

http://chroniclingamerica.loc.gov
42 của chúng tôi là tạo một trang lỗi mà người dùng nhìn thấy nếu người dùng gặp lỗi hoặc nhập một tuyến đường đã được xác định:

http://chroniclingamerica.loc.gov/search/pages/results/
3

Trong các phản hồi của HTML, mã

http://chroniclingamerica.loc.gov
43 có nghĩa là OK OK (dữ liệu dự kiến ​​được truyền), trong khi mã
http://chroniclingamerica.loc.gov
44 có nghĩa là không tìm thấy (không có tài nguyên nào có sẵn tại URL được đưa ra). Chức năng này cho phép chúng tôi trả về 404 trang khi có sự cố xảy ra trong ứng dụng.

Hàm

http://chroniclingamerica.loc.gov
41 của chúng tôi là một cải tiến trên chức năng
@app.route('/', methods=['GET'])
5 trước đây của chúng tôi trả về một cuốn sách dựa trên ID của nó. Hàm mới này cho phép lọc bởi ba trường khác nhau:
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
8,
http://chroniclingamerica.loc.gov
16 và
http://chroniclingamerica.loc.gov
17. Hàm trước tiên lấy tất cả các tham số truy vấn được cung cấp trong URL (hãy nhớ, các tham số truy vấn là một phần của URL theo
"city": [
        "Washington"
      ],
      "date": "19220730",
      "title": "The Washington Herald.",
      "end_year": 1939,
2, như
http://chroniclingamerica.loc.gov
51).

http://chroniclingamerica.loc.gov/search/pages/results/
4

Sau đó, nó kéo các tham số được hỗ trợ

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
8,
http://chroniclingamerica.loc.gov
16 và
http://chroniclingamerica.loc.gov
17 và liên kết chúng với các biến thích hợp:

http://chroniclingamerica.loc.gov/search/pages/results/
5

Phân đoạn tiếp theo bắt đầu xây dựng một truy vấn SQL sẽ được sử dụng để tìm thông tin được yêu cầu trong cơ sở dữ liệu. Các truy vấn SQL được sử dụng để tìm dữ liệu trong cơ sở dữ liệu có biểu mẫu này:

http://chroniclingamerica.loc.gov/search/pages/results/
6

Để có được dữ liệu chính xác, chúng tôi cần xây dựng cả một truy vấn SQL trông giống như trên và danh sách với các bộ lọc sẽ được khớp. Kết hợp lại, truy vấn và các bộ lọc do người dùng cung cấp sẽ cho phép chúng tôi lấy các cuốn sách chính xác từ cơ sở dữ liệu của chúng tôi.

Chúng tôi bắt đầu xác định cả truy vấn và danh sách bộ lọc:

http://chroniclingamerica.loc.gov/search/pages/results/
7

Sau đó, nếu

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
8,
http://chroniclingamerica.loc.gov
16 hoặc
http://chroniclingamerica.loc.gov
17 được cung cấp dưới dạng tham số truy vấn, chúng tôi sẽ thêm chúng vào cả danh sách truy vấn và bộ lọc:

http://chroniclingamerica.loc.gov/search/pages/results/
8

Nếu người dùng đã cung cấp không có tham số truy vấn nào trong số này, chúng tôi không có gì để hiển thị, vì vậy chúng tôi sẽ gửi chúng đến trang 404 404 không tìm thấy:

http://chroniclingamerica.loc.gov/search/pages/results/
9

Để hoàn thiện truy vấn của chúng tôi, chúng tôi loại bỏ dấu ngoặc `và ____ 158;` Yêu cầu ở cuối tất cả các câu lệnh SQL:

Cuối cùng, chúng tôi kết nối với cơ sở dữ liệu của mình như trong hàm

http://chroniclingamerica.loc.gov
31 của chúng tôi, sau đó thực hiện truy vấn mà chúng tôi đã xây dựng bằng danh sách bộ lọc của chúng tôi:

http://chroniclingamerica.loc.gov/search/pages/results/?format=json&proxtext=fire
0

Cuối cùng, chúng tôi trả về kết quả của truy vấn SQL được thực hiện của chúng tôi là JSON cho người dùng:

Whew! Khi tất cả được nói và thực hiện, phần mã này đọc các tham số truy vấn do người dùng cung cấp, xây dựng truy vấn SQL dựa trên các tham số đó, thực hiện truy vấn đó để tìm các cuốn sách phù hợp trong cơ sở dữ liệu và trả về các trận đấu đó dưới dạng JSON cho người dùng. Phần mã này làm cho khả năng lọc API API của chúng tôi, những người sử dụng người dùng tinh vi hơn đáng kể, giờ đây có thể tìm thấy sách, ví dụ, Ursula K. Le Guin được xuất bản năm 1975 hoặc tất cả các cuốn sách trong cơ sở dữ liệu được xuất bản năm 2010.

API của chúng tôi trong thực tế

Bây giờ chúng tôi đã triển khai API đọc xa của chúng tôi, hãy để xem xét cách sử dụng nó trong các dự án kỹ thuật số và trong nghiên cứu.

Một trong những lợi thế của việc cung cấp dữ liệu thông qua API, trái ngược với việc cung cấp một số loại cơ sở dữ liệu hoặc tệp có thể tải xuống cho người dùng, là, vì dữ liệu mới hoặc tài nguyên bổ sung được thêm vào, chúng có sẵn ngay lập tức cho các dự án được xây dựng bằng API. Hãy tưởng tượng rằng chúng tôi công khai API của chúng tôi và người dùng tạo ra một hình ảnh biểu đồ theo chiều dài của một câu đầu tiên trong các ký tự trong các nhân vật chống lại năm xuất bản của nó:

Hướng dẫn how do you write an api in python flask? - làm thế nào để bạn viết một api trong bình python?

Scatterplot của độ dài câu đầu tiên so với ngày xuất bản.

Khi những người chiến thắng Hugo mới được thêm vào cơ sở dữ liệu, tập lệnh tạo ra trực quan hóa này ngay lập tức có thể sử dụng thông tin mới. Nếu trực quan hóa được tạo trong D3 hoặc một tiện ích dựa trên web khác, cốt truyện này thực sự sẽ phản ánh dữ liệu bổ sung được thêm vào kho lưu trữ sách ngay khi kho lưu trữ được cập nhật, trong thời gian thực. Khi dữ liệu bổ sung tích lũy, ví dụ, chúng tôi có thể tìm hiểu xem John Scalzi, có thể mở ra một cách bất thường cho áo đỏ năm 2013 của anh ấy là một quang sai hay tiếp tục xu hướng dài hơn đối với sự hiểu biết trong khoa học viễn tưởng. Ngược lại, nếu API của bạn thay đổi cấu trúc URL của nó hoặc ngừng hoạt động, các ứng dụng dựa trên nó sẽ không còn hoạt động nữa. Hãy nhớ rằng, khi tạo API, bạn đang nhận một số trách nhiệm đối với các ứng dụng mà người khác có thể xây dựng với nó.

Một API mạnh mẽ có thể được coi là xương sống của một số lượng dự án hoặc con đường nghiên cứu có khả năng giới hạn. Mặc dù ví dụ trên có hình thức trực quan hóa số lượng dữ liệu hạn chế mà chúng tôi đã cung cấp trong kho lưu trữ đọc xa của chúng tôi, một dự án dựa trên API này có thể dễ dàng ở dạng TwitterBot chia sẻ các câu đầu tiên (tìm hiểu cách Tạo một cái với bài học sử học lập trình này) hoặc một trang web thư viện hiển thị các cơ hội mở cửa và năm xuất bản cùng với siêu dữ liệu sách khác. Trong nhiều trường hợp, trước tiên, việc tạo giao diện API cho dữ liệu hoặc chức năng cốt lõi của bạn trước khi ngoại suy trên đó để tạo trực quan hóa, ứng dụng hoặc trang web. Nó không chỉ làm cho công việc của bạn có thể truy cập được cho các nhà nghiên cứu làm việc trên các dự án khác, mà nó thường dẫn đến một dự án dễ hiểu và có thể duy trì hơn.

Tài nguyên

Các tài nguyên dưới đây cung cấp thông tin về API hữu ích cho các nhà nghiên cứu trong khoa học xã hội và nhân văn cũng như đọc thêm về các khái niệm API.

API cho các nhà nghiên cứu nhân văn

Biên niên sử Mỹ (Thư viện Quốc hội) - Một bộ sưu tập các bài báo của Mỹ số hóa từ thế kỷ 18 đến thế kỷ 20.

Kết nối kho lưu trữ (CORE) - Một bộ sưu tập các bài viết truy cập mở từ các nguồn khác nhau được lưu trữ bởi Đại học Mở.

Lưu trữ bản ballad bên cạnh tiếng Anh (EBBA)

Dịch vụ dữ liệu lịch sử (HDS) - Một bộ sưu tập dữ liệu từ nhiều nguồn lịch sử.

Châu Âu

Đào vào danh sách API dữ liệu

Tài nguyên API

Giải phẫu URL - giải thích các phần khác nhau của URL (giao thức, miền, đường dẫn, v.v.) chi tiết hơn.

Bài viết gốc về phần còn lại - Luận án tiến sĩ của Roy Thomas Fielding đã giới thiệu các khái niệm đằng sau triết lý còn lại của thiết kế API.

Hướng dẫn Mega Flask - hướng dẫn nổi tiếng nhất để học khung web Flask.

Chúng ta có thể tạo API bằng bình không?

Trong bài viết này, chúng tôi sẽ xây dựng API REST trong Python bằng khung bình.Flask là một khung vi mô phổ biến để xây dựng các ứng dụng web.Vì nó là một khung hình vi mô, rất dễ sử dụng và thiếu hầu hết các chức năng nâng cao được tìm thấy trong một khung chính thức.we will build a REST API in Python using the Flask framework. Flask is a popular micro framework for building web applications. Since it is a micro-framework, it is very easy to use and lacks most of the advanced functionality which is found in a full-fledged framework.

Python và Flask có tốt cho API không?

Python là một lựa chọn phổ biến cho sự phát triển API, không chỉ bởi vì nó là một trong những ngôn ngữ lập trình được yêu thích nhất, mà còn bởi vì hệ sinh thái phong phú của các thư viện và khuôn khổ phục vụ mục tiêu đó, các thư viện với sự phổ biến to lớn như Django, Flask và Fastapi., not only because it is one of the most loved programming languages, but also because of its rich ecosystem of libraries and frameworks that serve that goal, libraries with immense popularity such as Django, Flask, and FastAPI.

Loại API nào là bình?

"Flask cho phép các nhà phát triển Python tạo ra các API yên tĩnh nhẹ."lightweight RESTful APIs."