Hướng dẫn crud operation using flask mongodb - thao tác thô sơ bằng cách sử dụng bình mongodb

Ảnh của Florian Olivo trên unplash

TLDR; Chúng tôi sẽ thảo luận về cách sử dụng Docker để triển khai API MongoDB. Mã có sẵn ở đây -GithubWe are going to discuss how to use Docker to deploy MongoDB API. Code is available here -Github

Hướng dẫn này sẽ giúp bạn phát triển giao diện API cho MongoDB và cũng sẽ làm sáng tỏ máy chủ MongoDB cô lập để API của chúng tôi chỉ có thể truy cập và không có gì khác (đó là trường hợp lý tưởng).

Lúc đầu, chúng tôi sẽ thảo luận về cách tạo API như vậy và sau đó chúng tôi sẽ triển khai chương trình của mình cho Docker để ứng dụng của chúng tôi thực sự bị cô lập và môi trường độc lập (thêm về điều này sau này).

Chúng tôi bắt đầu bằng một lời giải thích về một số thuật ngữ cơ bản liên quan đến phần này-

NoQuery - Không chỉ SQL là một giải pháp thay thế cho các cơ sở dữ liệu quan hệ truyền thống trong đó dữ liệu được lưu trữ trong các lược đồ được xác định nghiêm ngặt. Trong NoQuery, chúng tôi chủ yếu lưu trữ dữ liệu ở định dạng giống JSON hoặc JSON. Có nhiều lý do để áp dụng NoQupl trong một dự án nhưng những người chính là Not Only SQL is an alternative to traditional Relational Databases in which data is stored in strickly defined schemas. In NoSQL, we mostly store data in JSON or JSON-like format. There are many reasons to adopt NoSQL in a project but primary ones are-

  • Tốc độ hoạt động cao
  • Tính linh hoạt trong việc lưu trữ dữ liệu

Docker - Đây là một công nghệ container hóa cho phép chúng tôi chứa các ứng dụng của mình để chúng không bị trôi dạt môi trường và được phân lập chỉ với một vài thành phần tiếp xúc với thế giới để xem. Một thùng chứa tương tự như máy ảo nhưng nhẹ hơn nhiều so với VM thực tế.It is a containerizing technology that allows us to containerize our applications so that they are free from environmental drift and are isolated with only a few components exposed for the world to view. A container is similar to a Virtual Machine but is much lighter than an actual VM.

REST - Chuyển giao trạng thái đại diện là một thiết kế kiểu kiến ​​trúc cho giao diện lập trình ứng dụng cho phép chúng tôi có được trạng thái hiện tại của một ứng dụng. — Representational State Transfer is an architectural style design for Application Programming Interface which allows us to get the current state of an application.

Mô hình CRUD - Bất cứ khi nào chúng tôi thiết kế dịch vụ API, mô hình của chúng tôi phải bao gồm ít nhất 4 loại chức năng cơ bản - Tạo, đọc, cập nhật, xóa hoặc CRUD.— Whenever we are designing an API service, our model must include at least 4 basic types of functionalities — Create, Read, Update, Delete, or CRUD.

Trong môi trường còn lại, chúng ta nên sử dụng phương thức HTTP cung cấp hoạt động CRUD trên bất kỳ tài nguyên nào. Những phương pháp này bao gồm -

  1. HTTP GET - Phương pháp này được sử dụng để đọc bất kỳ tài nguyên nào.
  2. Bài đăng HTTP - Phương thức này được sử dụng để viết bất kỳ tài nguyên nào.
  3. HTTP Put - Phương pháp này được sử dụng để cập nhật bất kỳ tài nguyên nào.
  4. Xóa HTTP - Phương thức này được sử dụng để xóa bất kỳ tài nguyên nào.

Xin lưu ý rằng bạn sẽ biết về các phần khác nhau của mã tại các thời điểm khác nhau, nhưng cuối cùng, chúng tôi đang tạo một mô -đun duy nhất có thể đáp ứng yêu cầu truy cập MongoDB thông qua các cuộc gọi API.

Bắt đầu với Docker và Mongo

Trong phần này, chúng tôi sẽ thảo luận về cách thiết lập môi trường Docker và cách kéo và chạy ứng dụng MongoDB dưới dạng container.

Bước 1- Thiết lập Docker.

Điều hướng ở đây và tải xuống phiên bản mới nhất của Docker.

Bạn có thể xác minh cài đặt bằng cách nhập lệnh sau trong CMD -

docker -v

Bước 2- Kéo hình ảnh DB Mongo.

Hiện tại, chúng tôi có thể coi hình ảnh là tệp thiết lập cho một ứng dụng. Một hình ảnh bao gồm tất cả các tệp cần thiết để thiết lập một ứng dụng hoặc nhiều bản sao của ứng dụng này dưới dạng container.

Hình 1. Kéo hình ảnh MongoDB.

Bước 3 Tạo một container cho MongoDB.

Bây giờ chúng ta có hình ảnh của chúng ta bây giờ chúng ta cần chạy nó. Đối với điều này, chúng ta cần tạo một container. Các lệnh cho điều này được hiển thị bên dưới.

Hình 2. Các lệnh để tạo và bắt đầu một thùng chứa MongoDB.

Vì vậy, chúng tôi có thùng chứa MongoDB của chúng tôi. Trong vòng chưa đầy 1 phút, 30 giây cài đặt Docker, bạn có thể có MongoDB của mình hoặc như một vấn đề thực tế bất kỳ ứng dụng container nào lên và chạy. Bây giờ lưu ý rằng trong tổng thời gian,> 1 phút đã được sử dụng để cài đặt hình ảnh và tạo của container. Khi hình ảnh trên PC của chúng tôi và một thùng chứa được tạo, chúng tôi có thể khởi động ứng dụng của mình trong vài giây (7 giây trong trường hợp của tôi).

Hãy để thảo luận về lệnh sáng tạo.

docker create -it --name MongoTest -p 5000:27017 mongo
  • docker tạo để nói rằng chúng tôi đang tạo một số container to tell we are creating some container
  • -Tôi nói rằng nó sẽ là một thùng chứa tương tác, tức là nó sẽ giao tiếp với môi trường bên ngoài. to tell that it is going to be an interactive container i.e it will communicate with the external environment.
  • .tells that we are going to refer our container with name MongoTest
  • -P 5000: 27017 cho biết rằng liên kết cổng MongoDB 27017 với 5000 cổng của máy cục bộ. MongoDB thường chạy trên cổng 27107.tells that link the MongoDB’s 27017 port with 5000 port of the local machine. MongoDB usually runs on port 27107.
  • Tên Mongo của hình ảnh mà chúng tôi muốn sử dụng để tạo hình ảnh. name of the image that we want to use to create the image.

Ngoài ra chỉ để tránh sự nhầm lẫn, một khi bạn có thùng chứa của mình hơn bạn luôn cần chạy lệnh này để bắt đầu

docker start MongoContainerName

Để dừng một thùng chứa, chúng tôi sử dụng

docker stop MongoContainerName

Vì vậy, chúng tôi đã triển khai MongoDB của chúng tôi trong container và có thể truy cập tại cổng 5000

Hình 3. Mongo DB được triển khai tại cổng 5000.

Bây giờ để xem đúng những gì có sẵn trong cơ sở dữ liệu Mongo của chúng tôi, chúng tôi có thể sử dụng một ứng dụng có tên MongoDB La bàn -

Hình 4. La bàn MongoDB.

Như chúng ta có thể thấy hiện tại chúng ta đang ở trong cơ sở dữ liệu- ishmeetdb và thu thập mọi người. Ngoài ra, nó đang có một tài liệu như bây giờ.

Cơ sở dữ liệu của chúng tôi đã sẵn sàng !!!

Tạo tương tác MongoDB

Trong phần này, chúng tôi sẽ tạo API bằng máy chủ Flask và pymongo cho phép chúng tôi tương tác với ứng dụng MongoDB được triển khai trước đó.

Bước 1- Cài đặt và nhập thư viện.

Đối với dự án này, chúng tôi yêu cầu thư viện Flask và Pymongo. Flask sẽ cho phép chúng tôi tạo một máy chủ và pymongo sẽ cho phép chúng tôi giao tiếp với MongoDB.

Để cài đặt các thư viện này trên môi trường của bạn, hãy chạy các lệnh sau -

Đoạn trích 1. Cách cài đặt bình và pymongo

Ngoài ra, bạn cũng có thể tham khảo các yêu cầu.txt có sẵn trong các tệp dự án và sử dụng lệnh sau để cài đặt tất cả các phụ thuộc trong một lần -

Đoạn trích 2. Cách cài đặt tất cả các phụ thuộc bằng các yêu cầu.txt

Sau đó tạo một tệp python và nhập thư viện bình và pymongo như sau-

Snippet 3. Nhập các phụ thuộc vào dự án của bạn.

Bước 2- Tạo tương tác MongoDB.

Trong bước này, chúng tôi sẽ tạo ra một mô -đun để tương tác với MongoDB. Thư viện Python từ Pymongo giúp chúng ta tương tác với MongoDB.

Snippet 4 lớp Mongoapi.

Chúng tôi bắt đầu bằng cách tạo một lớp đơn giản và phương thức khởi tạo của nó. Lưu ý rằng trong trường hợp này, chúng tôi đã xác định trước máy khách của chúng tôi nhưng bạn có thể làm cho nó rời rạc hơn bằng cách hỏi trường này từ người dùng.

Chúng tôi chấp nhận thông tin về cơ sở dữ liệu và bộ sưu tập từ người dùng và khởi tạo đối tượng thu thập cơ sở dữ liệu của chúng tôi thông qua nó. Chúng tôi sẽ sử dụng đối tượng bộ sưu tập này trong suốt mã của chúng tôi để đọc và thao tác dữ liệu.

Snippet 5 Phương thức đọc.

Phương thức đọc - Phương pháp này sẽ cho phép chúng tôi đọc tất cả các tài liệu có trong bộ sưu tập của chúng tôi. Dòng số 3 được sử dụng để định dạng lại dữ liệu. Đầu ra của đối tượng thu thập là từ điển DataType. Chúng tôi đang loại bỏ khóa ‘_id, vì nó chứa ID đối tượng bên trong MongoDB và không có ích gì với người dùng.— This method will allow us to read all of the documents present in our collection. Line number 3 is used to reformat the data. The output of the collection object is of datatype dictionary. We are removing key ‘_id’ as it is containing MongoDB’s internal object ID and is of no use to the user.

Đoạn trích 6. Phương thức ghi.

Phương thức ghi- Phương pháp này sẽ cho phép chúng tôi thêm một tài liệu mới trong bộ sưu tập MongoDB. Xin lưu ý rằng chúng tôi đang chấp nhận dữ liệu từ người dùng theo tài liệu chính. Phương thức được sử dụng ở đây là insert_one () cho phép chúng tôi chèn một tài liệu tại một thời điểm. Xin lưu ý rằng chúng tôi cũng đang có một phương thức khác chèn_many () cho phép chúng tôi chèn nhiều tài liệu cùng một lúc và có thể được thực hiện với logic tương tự.This method will allow us to add a new document in MongoDB’s collection. Please note that we are accepting data from the user under the key “Document”. The method used here is insert_one()which will allow us to insert one document at a time. Please note that we are also having another method insert_many()that allows us to insert multiple documents at once and can be implemented with a similar logic.

Đoạn trích 7. Phương thức cập nhật.

Phương thức cập nhật- Phương pháp này cho phép chúng tôi cập nhật bất kỳ tài liệu hiện có. Đối với điều này, chúng tôi cần chấp nhận 2 chi tiết từ người dùng. Đầu tiên là bộ lọc trên cơ sở chúng tôi sẽ chọn các tài liệu để được cập nhật. Thứ hai là datatobeupdated. Lưu ý rằng giống như chèn, chúng tôi đã sử dụng phương thức pymongo ‘update_one (). Điều này có thể được thay thế với ‘update_many (), tùy thuộc vào yêu cầu. Ngoài ra, một điều khác cần lưu ý là tùy thuộc vào sự sẵn có của dữ liệu được cập nhật, chúng tôi đã tùy chỉnh phản hồi.This method allows us to update any existing documents. For this, we need to accept 2 details from the user. First is the filter on the basis of which we are going to select documents to be updated. Second is DataToBeUpdated. Note that like insert we have used the ‘update_one()’method of PyMongo. This can be interchanged with ‘update_many()’ depending upon the requirement. Also, another thing to be noted is that depending upon the availability of data to be updated, we have customized the response.

P.S - Tránh sử dụng Cập nhật đơn giản () vì nó có thể cung cấp cho bạn một số kết quả bất ngờ. Tôi thấy đây là một lời giải thích rất tốt về vấn đề bạn có thể gặp phải.

Đoạn trích 8. Xóa phương thức

Xóa Phương thức- Phương pháp này cho phép chúng tôi xóa bất kỳ tài liệu hiện có nào. Đối với điều này, chúng tôi đang chấp nhận một số chi tiết lọc mẫu người dùng để trích xuất các tài liệu sẽ bị xóa. Lưu ý rằng như Update (), chúng tôi cũng có tin nhắn trả về tùy chỉnh tùy thuộc vào việc có thứ gì đó bị xóa hay không.This method allows us to delete any existing documents. For this, we are accepting some filtering details form users to extract the documents to be deleted. Note that like update() we also have custom return messages depending on if something was deleted or not.

Bây giờ với tất cả những gì được xác định, chúng tôi sẽ thực hiện một bài kiểm tra đơn giản về mô -đun với dữ liệu giả. Chúng tôi sẽ đọc dữ liệu từ cơ sở dữ liệu MongoDB của chúng tôi. Vì điều đó, chúng tôi sẽ sử dụng điều này -

Đoạn trích 10. Phương pháp chính

Lưu ý rằng chúng tôi chỉ gọi phương thức đọc () trong dòng số 7.

Hãy để chạy mã -

Hình 5. Chạy mã để kiểm tra Mongoapi.py

🎉🎉🎉 Nó hoạt động!

Bước 3- Tạo một máy chủ bình.

Để tạo máy chủ Flask, chúng tôi chỉ cần làm theo các bước sau

  1. Khởi tạo ứng dụng. (Dòng 2)
  2. Xác định một điểm nhập duy nhất để chúng tôi có thể xác minh rằng máy chủ của chúng tôi đang hoạt động. (Dòng 4 trận8)
  3. Xác định các cổng và IP và khởi động máy chủ. (Dòng 11)
Đoạn trích 11. Thiết lập máy chủ Flask

‘@App.route, là một nhà trang trí xác định điểm cuối sẽ được chấp nhận.

Vì rõ ràng là cổng bằng 5001 cho dự án này. Điều này là để tránh mọi xung đột với MongoDB có thể truy cập trên cổng 5000. Bất cứ khi nào chúng tôi sẽ truy cập cổng này, chúng tôi dự kiến ​​sẽ được chào đón với {Trạng thái tình trạng

Hình 6. Kiểm tra máy chủ bình.

Bước 4- Xác định các phương pháp CRUD HTTP.

Bây giờ để triển khai CRUD thực sự, chúng tôi sẽ xác định 4 phương thức HTTP khác nhau với sự trợ giúp của các tuyến đường (như được mô tả trong bước 3).

Snippet 12. Đọc (GET) Phương thức cho API MongoDB .________ 4

Đoạn mã ở bên trái cho thấy việc thực hiện chức năng đọc của API CRUD. Chúng tôi đang đọc dữ liệu khi một yêu cầu được gửi bằng phương thức GET HTTP. Dữ liệu JSON bên phải hiển thị dữ liệu mà API của chúng tôi yêu cầu cho chức năng thích hợp. Dữ liệu này sẽ được tiêu thụ bởi ‘Code Snippet 5, để đọc mọi thứ có sẵn trong bộ sưu tập MongoDB đã đề cập.Read functionality of the CRUD API. We are reading the data when a request is sent using the GET HTTP Method. The JSON data on right shows what data is required by our API for proper functionality. This data will be consumed by ‘Code Snippet 5’ to read everything available in the mentioned MongoDB collection.

Hãy để thử nghiệm nó bằng cách sử dụng Postman-

Hình 7. Kiểm tra phương pháp GET bằng Postman.

Như chúng ta có thể thấy, chúng ta có tài liệu có sẵn trong bộ sưu tập ‘người. Đến bây giờ, nó bao gồm 2 trường - First_name và Age. Chúng ta sẽ xem cách chúng ta có thể sử dụng 2 trường này để thêm hoặc xóa thêm dữ liệu.

Snippet 13. Viết (bài) Phương thức cho API MongoDB .________ 5

Đoạn mã ở bên trái cho thấy việc triển khai tính tạo ra của API CRUD. Chúng tôi đang viết dữ liệu khi một yêu cầu được gửi bằng phương thức POST HTTP. Dữ liệu JSON bên phải hiển thị dữ liệu mà API của chúng tôi yêu cầu cho chức năng thích hợp. Chúng tôi đã thêm một trường mới của tài liệu trên mạng, bao gồm dữ liệu của tài liệu mới cần được thêm vào. Dữ liệu này sẽ được tiêu thụ bởi ‘Code Snippet 6, để viết dữ liệu mới trong bộ sưu tập được cung cấp.Createfunctionality of the CRUD API. We are writing the data when a request is sent using the POST HTTP Method. The JSON data on right shows what data is required by our API for proper functionality. We have added a new field of “Document” which consists of the data of the new document which needs to be added. This data will be consumed by ‘Code Snippet 6’ to write new data in the provided collection.

Hãy để thử nghiệm nó bằng cách sử dụng Postman-

Hình 7. Kiểm tra phương pháp GET bằng Postman.

Như chúng ta có thể thấy, chúng ta có tài liệu có sẵn trong bộ sưu tập ‘người. Đến bây giờ, nó bao gồm 2 trường - First_name và Age. Chúng ta sẽ xem cách chúng ta có thể sử dụng 2 trường này để thêm hoặc xóa thêm dữ liệu.

Snippet 13. Viết (bài) Phương thức cho API MongoDB .________ 5

Đoạn mã ở bên trái cho thấy việc triển khai tính tạo ra của API CRUD. Chúng tôi đang viết dữ liệu khi một yêu cầu được gửi bằng phương thức POST HTTP. Dữ liệu JSON bên phải hiển thị dữ liệu mà API của chúng tôi yêu cầu cho chức năng thích hợp. Chúng tôi đã thêm một trường mới của tài liệu trên mạng, bao gồm dữ liệu của tài liệu mới cần được thêm vào. Dữ liệu này sẽ được tiêu thụ bởi ‘Code Snippet 6, để viết dữ liệu mới trong bộ sưu tập được cung cấp.Updatefunctionality of the CRUD API. We are updating the data when a request is sent using the PUT HTTP Method. The JSON data on right shows what data is required by our API for proper functionality. We have added a new field of “Filter” basis on which we determine which document needs to be updated. Another field that has been introduced is “DataToBeUpdated” which tells which exact data is to be updated. This data will be consumed by ‘Code Snippet 7’ to update existing data in the provided collection.

Hãy để thử nghiệm nó bằng cách sử dụng Postman-

Hình 7. Kiểm tra phương pháp GET bằng Postman.

Như chúng ta có thể thấy, chúng ta có tài liệu có sẵn trong bộ sưu tập ‘người. Đến bây giờ, nó bao gồm 2 trường - First_name và Age. Chúng ta sẽ xem cách chúng ta có thể sử dụng 2 trường này để thêm hoặc xóa thêm dữ liệu.

Snippet 13. Viết (bài) Phương thức cho API MongoDB .________ 5

Đoạn mã ở bên trái cho thấy việc triển khai tính tạo ra của API CRUD. Chúng tôi đang viết dữ liệu khi một yêu cầu được gửi bằng phương thức POST HTTP. Dữ liệu JSON bên phải hiển thị dữ liệu mà API của chúng tôi yêu cầu cho chức năng thích hợp. Chúng tôi đã thêm một trường mới của tài liệu trên mạng, bao gồm dữ liệu của tài liệu mới cần được thêm vào. Dữ liệu này sẽ được tiêu thụ bởi ‘Code Snippet 6, để viết dữ liệu mới trong bộ sưu tập được cung cấp.Delete functionality of the CRUD API. We are deleting the data when a request is sent using the DELETE HTTP Method. The JSON data on right shows what data is required by our API for proper functionality. We have added a new field of “Filter” basis on which we determine which document needs to be deleted. This data will be consumed by ‘Code Snippet 8’ to delete existing data in the provided collection.

Hãy để thử nghiệm nó bằng cách sử dụng Postman-

Hình 7. Kiểm tra phương pháp GET bằng Postman.

Như chúng ta có thể thấy, chúng ta có tài liệu có sẵn trong bộ sưu tập ‘người. Đến bây giờ, nó bao gồm 2 trường - First_name và Age. Chúng ta sẽ xem cách chúng ta có thể sử dụng 2 trường này để thêm hoặc xóa thêm dữ liệu.

Snippet 13. Viết (bài) Phương thức cho API MongoDB .________ 5

Triển khai mã của chúng tôi trên Docker.

Trong phần này, thảo luận về cách triển khai mã trên Docker và cách liên kết 2 container Docker trong nội bộ. Chúng ta sẽ xem cách cô lập phiên bản MongoDB để API của chúng ta là cách duy nhất để truy cập vào bên ngoài này.

Bước 1- Xác định Dockerfile cho ứng dụng của chúng tôi.

Dockerfile là một tệp cấu hình cho chương trình của chúng tôi. Nó xác định môi trường làm việc cơ bản cho ứng dụng của chúng tôi và cũng xác định cách các ứng dụng của chúng tôi sẽ tương tác với môi trường bên ngoài.

Xin lưu ý rằng nội tuyến 20, chúng tôi đang lộ cổng 5001. Nó giống như trong mã trong mã bình của chúng tôi. Điều này sẽ cho phép chúng tôi giao tiếp với ứng dụng trong container.

Bây giờ vì chúng tôi đang tạo dockerfile, chúng tôi cần tạo một tệp docker-compose. Một tệp docker-compose cho phép chúng tôi liên kết nhiều container và chạy chúng cùng một lúc.

Trên đây là tệp docker-compose.yml mà chúng tôi đã mô tả trong thư mục dự án của chúng tôi. Lưu ý rằng trong các dịch vụ, chúng tôi có 2 container. Cái đầu tiên là hình ảnh Mongo mà chúng tôi đã kéo. Cái thứ hai là container mới mà chúng tôi dự định xây dựng. Ngoài ra, lưu ý làm thế nào trên dòng 8, chúng tôi đã xác định rằng thùng chứa API của chúng tôi phụ thuộc vào thùng chứa Mongo. Điều này sẽ thiết lập một kết nối nội bộ giữa hai container này.

Thời gian để chạy các container-

docker-compose run --build

Lệnh này sẽ xây dựng các container của chúng tôi và chạy chúng cho chúng tôi. Bạn có thể chạy lại lệnh này nếu bạn cập nhật một cái gì đó trong mã của mình nhưng nếu bạn chỉ muốn đưa container lên thì chỉ cần sử dụng -

docker-compose run

Xin lưu ý rằng lệnh này sẽ chỉ hoạt động khi tệp ‘docker-compose.yml có mặt trong thư mục đã cho với tất cả các tệp phụ thuộc.

Hình 11. Kiểm tra lệnh docker-compose

À chính nó đấy! Đây là cách chúng tôi tạo ra một API CRUD RESTful với Bình Python, MongoDB và Docker. Vui lòng đăng những nghi ngờ và quan điểm của bạn trong các ý kiến.

Tài nguyên dự án - GitHub

🤖