MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Xây dựng các API REST bằng EVE

Python là một trong những ngôn ngữ lập trình dễ đọc và dễ viết nhất mọi thời đại. Trong những năm qua, mức độ phổ biến của Python chỉ ngày càng tăng và nó được sử dụng rộng rãi trong phát triển ứng dụng web, viết kịch bản, tạo trò chơi, tính toán khoa học, v.v.

Flask là một khung ứng dụng web Python đang trở nên phổ biến do dễ sử dụng cho người mới bắt đầu sử dụng Python. Trong hướng dẫn này, chúng ta sẽ xem xét EVE, một khung xây dựng API REST dựa trên Flask, MongoDB và Redis. Từ các tài liệu chính thức:

Được cung cấp bởi Flask, MongoDB, Redis và những mục đích tốt đẹp Eve cho phép dễ dàng xây dựng và triển khai Dịch vụ Web RESTful đầy đủ tính năng, có thể tùy chỉnh cao.

Những gì chúng tôi sẽ tạo ra

Trong hướng dẫn này, chúng ta sẽ xem cách xây dựng các API REST bằng cách sử dụng khung EVE. Tiếp theo, sử dụng AngularJS, chúng tôi sẽ thiết kế giao diện người dùng cho một ứng dụng đơn giản và làm cho nó hoạt động bằng cách sử dụng các API REST được xây dựng bằng EVE. Trong hướng dẫn này, chúng tôi sẽ triển khai chức năng sau:

  • Tạo API người dùng
  • Xác thực API người dùng
  • Thêm API các mục
  • API Xóa các mục
  • Cập nhật API mặt hàng

Bắt đầu

Cài đặt

Chúng tôi sẽ sử dụng pip để cài đặt EVE.

pip install eve

Chúng tôi sẽ sử dụng MongoDB dưới dạng cơ sở dữ liệu. Hãy xem các tài liệu chính thức để cài đặt theo hệ thống của bạn.

Tạo API cơ bản

Tạo một thư mục dự án có tên là PythonAPI . Điều hướng đến PythonAPI và tạo một tệp có tên api.py . Bên trong api.py nhập EVE và tạo một đối tượng EVE.

from eve import Eve
app = Eve()

Tiếp theo, chạy ứng dụng app khi chương trình được thực thi như một chương trình chính.

from eve import Eve
app = Eve()

if __name__ == '__main__':
    app.run()

Chạy MongoDB của bạn sử dụng lệnh sau:

mongod --dbpath= <PATH-TO> /data/db/

Như bạn có thể thấy, chúng ta cần chỉ định một đường dẫn cho các tệp db. Chỉ cần tạo data/db trong hệ thống tệp của bạn và chạy lệnh trên.

Cùng với một bản sao của MongoDB đang chạy, EVE yêu cầu tệp cấu hình có thông tin về tài nguyên API. Vì vậy, trong PythonAPI thư mục tạo một tệp khác có tên là settings.py và thêm mã sau:

DOMAIN = {'user': {}}

Đoạn mã trên thông báo cho EVE rằng một tài nguyên cho người dùng app có sẵn.

Lưu tất cả các tệp và chạy api.py :

python api.py

API phải trực tuyến như được hiển thị:

Chúng tôi sẽ sử dụng Ứng dụng khách Postman REST để gửi yêu cầu đến các API. Nó miễn phí và có thể được cài đặt bằng một cú nhấp chuột đơn giản. Sau khi cài đặt xong, hãy khởi chạy ứng dụng và nhập URL API (http://127.0.0.1:5000/) và nhấp vào gửi. Bạn sẽ có phản hồi như được hiển thị:

Vì chúng tôi chưa gọi bất kỳ tài nguyên API cụ thể nào nên nó sẽ hiển thị tất cả các tài nguyên có sẵn. Bây giờ, hãy thử gọi cho người dùng app tài nguyên và bạn phải có phản hồi cụ thể cho người dùng app .

Tạo và xác thực API người dùng

Tạo API người dùng

Chúng tôi sẽ bắt đầu bằng cách xây dựng một API để tạo hoặc đăng ký người dùng cho ứng dụng của chúng tôi. Người dùng sẽ có một số trường nhất định như First Name , Last Name , Username , PasswordPhone Number .

Vì vậy, trước tiên chúng ta cần xác định một lược đồ cho một người dùng. Lược đồ xác định các trường và kiểu dữ liệu của các trường khóa. Mở settings.py và sửa đổi DOMAIN bằng cách xác định một lược đồ như được hiển thị:

DOMAIN = {
    'user': {
        'schema': {
            'firstname': {
                'type': 'string'
            },
            'lastname': {
                'type': 'string'
            },
            'username': {
                'type': 'string',
                 'unique': True
            },
            'password': {
                'type': 'string'
            },
            'phone': {
                'type': 'string'
            }
        }
    }
}

Như bạn có thể thấy trong đoạn mã trên, chúng tôi đã xác định các trường chính cần thiết để tạo người dùng và kiểu dữ liệu của nó được xác định trong lược đồ. Lưu các thay đổi và thực thi api.py . Từ Khách hàng Postman, hãy thử thực hiện một yêu cầu ĐĂNG cùng với các thông số bắt buộc tới http://127.0.0.1/user như hình:

Theo yêu cầu POST cho người dùng, nó đã đưa ra một 405 Method Not Allowed lỗi. Theo mặc định, EVE chỉ chấp nhận các yêu cầu GET. Nếu chúng ta muốn sử dụng bất kỳ phương thức nào khác, chúng ta cần xác định nó một cách rõ ràng. Mở settings.py và xác định các phương thức tài nguyên như được hiển thị:

RESOURCE_METHODS = ['GET', 'POST']

Lưu các thay đổi và thực thi api.py . Bây giờ, hãy thử lại để POST cho người dùng và bạn sẽ có phản hồi dưới đây:

Như bạn có thể thấy, yêu cầu POST ở trên đã thành công. Chúng tôi chưa xác định cấu hình cơ sở dữ liệu trong settings.py của chúng tôi , vì vậy EVE đã hoàn thành yêu cầu bằng cách sử dụng phiên bản đang chạy của MongoDB . Hãy đăng nhập vào MongoDB shell và xem bản ghi mới được tạo. Với phiên bản MongoDB đang chạy, hãy kích hoạt trình bao mongo:

mongo

Khi vào bên trong mongo shell, liệt kê tất cả các cơ sở dữ liệu có sẵn.

show databases;

Phải có eve cơ sở dữ liệu. Chuyển sang eve cơ sở dữ liệu.

use eve;

Thực thi show lệnh liệt kê các bảng bên trong eve cơ sở dữ liệu.

show tables;

Các bảng được liệt kê phải có một bảng được gọi là user . Liệt kê các bản ghi từ user bảng bằng cách sử dụng lệnh sau:

db.user.find()

Dưới đây là các bản ghi đã chọn từ các bảng người dùng:

Xác thực API người dùng

Tiếp theo, chúng tôi sẽ tạo một API để xác thực người dùng hiện có. Thông thường, nếu chúng ta thực hiện get yêu cầu điểm cuối người dùng (http://127.0.0.1:5000/user), nó sẽ cung cấp thông tin chi tiết về tất cả người dùng đã đăng ký từ cơ sở dữ liệu. Chúng ta cần thực hiện hai điều ở đây. Đầu tiên, chúng ta cần xác thực người dùng bằng tên và mật khẩu, thứ hai, chúng ta cần trả lại chi tiết người dùng từ cơ sở dữ liệu khi xác thực thành công.

Để có được chi tiết dựa trên tên, chúng tôi cần thêm trường tra cứu bổ sung trong DOMAIN trong settings.py .

'additional_lookup': {
            'url': 'regex("[\w]+")',
            'field': 'username',
            }

Như đã thấy trong đoạn mã trên, chúng tôi đã thêm trường tra cứu cho username . Bây giờ khi một yêu cầu GET được gửi đến http://127.0.0.1:5000/user/ <username> nó sẽ trả về thông tin chi tiết của người dùng với username cụ thể . Khi đưa ra yêu cầu cho một người dùng cụ thể, chúng tôi cũng sẽ gửi usernamepassword để xác thực.

Chúng tôi sẽ thực hiện xác thực cơ bản để xác minh một người dùng cụ thể dựa trên tên người dùng và mật khẩu. Đầu tiên, chúng ta cần nhập Basic Auth lớp từ EVE. Tạo một lớp có tên là Authenticate để triển khai xác thực như được hiển thị:

from eve.auth import BasicAuth

class Authenticate(BasicAuth):
    def check_auth(self, username, password, allowed_roles, resource,
                   method):
                   

Bây giờ, khi tài nguyên là user và phương thức yêu cầu là GET , chúng tôi sẽ xác thực người dùng. Khi xác thực thành công, thông tin chi tiết về người dùng của người dùng có tên trong điểm cuối API sẽ được trả về. Chúng tôi cũng sẽ hạn chế việc tạo người dùng bằng cách cung cấp tên người dùng và mật khẩu. Vì vậy, nếu phương thức là POST và điểm cuối API là người dùng, chúng tôi sẽ kiểm tra và xác thực tên người dùng và mật khẩu. Vì vậy, đây là Authenticate hoàn chỉnh lớp:

class Authenticate(BasicAuth):
    def check_auth(self, username, password, allowed_roles, resource,
                   method):
        if resource == 'user' and method == 'GET':
            user = app.data.driver.db['user']
            user = user.find_one({'username': username,'password':password})
            if user:
                return True
            else:
                return False
        elif resource == 'user' and method == 'POST':
            return username == 'admin' and password == 'admin'
        else:
            return True

Chúng tôi cần chuyển Authenticate tên lớp trong khi khởi tạo API. Vì vậy, hãy sửa đổi mã khởi tạo API như được hiển thị:

if __name__ == '__main__':
    app = Eve(auth=Authenticate)
    app.run()

Lưu tất cả các thay đổi và thực thi api.py . Cố gắng gửi một yêu cầu xác thực cơ bản với tên người dùng và mật khẩu từ Postman đến http://127.0.0.1/user/username (thay thế tên người dùng bằng bất kỳ tên người dùng hiện có nào khác). Khi xác thực thành công, bạn sẽ nhận được thông tin chi tiết về người dùng trong phản hồi như được hiển thị:

Thêm, xóa và cập nhật các mục

Thêm API mặt hàng

Để tạo API Thêm mặt hàng, tất cả những gì chúng ta cần làm là tạo một lược đồ mới cho mặt hàng trong settings.py .

'item': {
        'schema': {
            'name':{
                'type': 'string'
                },
            'username': {
                'type': 'string'
                }
            }
        }

API Thêm mặt hàng sẽ giúp mỗi người dùng đã đăng nhập thêm một mặt hàng. Chúng tôi sẽ lưu mục cùng với tên người dùng của người dùng đã nhập mục. Lưu các thay đổi và cố gắng thực hiện yêu cầu ĐĂNG lên http://127.0.0.1/item như được hiển thị:

Xóa API mặt hàng

Để xóa một mục do người dùng tạo, tất cả những gì chúng ta cần làm là gọi điểm cuối của mục /item_id . Nhưng chỉ cần gọi một yêu cầu XÓA sẽ không xóa mục. Để xóa một mục, chúng tôi cũng cần cung cấp _etag liên quan đến một mặt hàng cụ thể. Một lần item id_etag khớp, mục sẽ bị xóa khỏi cơ sở dữ liệu. Đây là cách phương thức DELETE được gọi trong điểm cuối của mục.

Cập nhật API mặt hàng

API cập nhật tương tự như API xóa. Tất cả những gì chúng ta phải làm là gửi một yêu cầu PATCH với item id_etag và các trường biểu mẫu cần được cập nhật. Đây là cách cập nhật chi tiết mặt hàng:


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm thế nào để cài đặt MongoDB trên hệ thống Windows?

  2. Ba điểm A của Bảo mật MongoDB - Xác thực, Ủy quyền &Kiểm toán

  3. MongoDB C #:ID Serialization mẫu tốt nhất

  4. MongoDB - Cập nhật hoặc Chèn đối tượng trong mảng

  5. Cài đặt MongoDB với Homebrew