Примечание. Эта статья написана моим коллегами. Мы блогися на одном месте
Вступление в спокойные API
Restful API с использованием JSON в HTTP Protocol – это, безусловно, самый популярный подход к созданию веб-API. Они позволяют разработчикам подумать с точки зрения ресурсов с действиями на этих ресурсов CRUD (создавать, чтение, обновление, удаление). Тем не менее, есть предстоящие API, такие как График Что все больше становится популярным со многими приложениями.
В этом руководстве мы собираемся построить спокойную API для создания, чтения, UpdateAnd удалить документы (которые будут содержать информацию о пользователе) от база данных Mongo Pyston Python и Flask.
Начиная
Вот инструменты, которые нам нужно будет построить наши API:
- Python 2.7.
- Почтальон Скачать здесь
- База данных Mongo Документация
- Robo 3T Скачать здесь
Создание вашей местной среды
Примечание. Во время работы с Python мы рекомендуем использовать виртуальную среду, чтобы держать все зависимости проекта, изолированные от других проектов.
conda create -n restfulapi python=2.7 anaconda # Create the environment source activate restfulapi # Activate the environment
Установка зависимостей
pip install -r requirements.txt
Запустите сервер MongoDB
Если вы используете MacOS, вы можете использовать заваривать
Чтобы запустить сервер.
brew services start mongodb
Коллекции в Монгодб
Коллекция аналогична таблице в традиционной реляционной БД. Мы будем создавать Пользователи Коллекция TOSTORE Пользовательские детали похожи на Пользователи Таблица в SQL.
Создать пользователей
Мы создадим конечную точку Post/API/V1/Пользователи
который принимает в объекте JSON, состоящий из деталей пользователей, таких как Имя
, электронное письмо
, Телефон
Как JSON в тело запроса. Мы также могли бы разработать конечную точку, чтобы взять на себя массив пользователей.
@app.route("/api/v1/users", methods=['POST']) def create_user(): """ Function to create new users. """ try: # Create new users body = ast.literal_eval(json.dumps(request.get_json())) record_created = collection.insert(body) body._id = record_created.inserted_id # Prepare the response return jsonify(body) except: # Something went wrong server side, so return Internal Server Error. resp.status_code = 500 return resp
Если это пакетная конечная точка, принимающая в массиве пользователей, мы могли бы вернуть количество созданных пользователей. С другой стороны, один пользователь может вернуть идентификатор объекта, поэтому Frestend может ссылаться на новичок в новинок.
Читать пользователей
Чтобы получить список пользователей, которые мы только что создали, мы разработаем конечную точку Получить/API/V1/пользователи
и пройти критерии поиска в качестве параметров строки запроса.
@app.route("/api/v1/users", methods=['GET']) def fetch_users(): """ Function to fetch the users. """ # Prepare the response try: # Call the function to get the query params query_params = helper_module.parse_query_params(request.query_string) key = query_params.keys()[0] value = query_params.values()[0] # Encode params key, value = helper_module.encode_params(key, value) # Fetch all the record(s) records_fetched = collection.find({key: value}) if len(records_fetched) > 0: # Prepare the response resp = jsonify(records_fetched) return resp else: # No records found, so we can return an empty list (Added for example) return jsonify([]) except: # Something went wrong server side, so return Internal Server Error. resp.status_code = 500 return resp
Мы вернем информацию о пользователе, если соответствующий документ найден еще, мы вернем пустой массив.
Обновлять пользователей
Теперь мы разработаем конечную точку Post/API/V1/пользователи/
обновить детали пользователя.
@app.route("/api/v1/users/", methods=['POST']) def update_user(): """ Function to update the user. """ try: # Update the user body = ast.literal_eval(json.dumps(request.get_json())) record_updated = collection.update_one({"_id": user_id}, body) # Prepare the response resp = jsonify(body) except: resp.status_code = 500 # Return the object return resp
Запрос на обновление:
Удалить пользователей
Наконец, мы разработаем конечную точку Удалить/API/V1/пользователи/
Чтобы удалить пользователь от базы данных.
@app.route("/api/v1/users/", methods=['DELETE']) def remove_user(): """ Function to remove the user. """ try: # Delete all the users matched body = ast.literal_eval(json.dumps(request.get_json())) record_deleted = collection.delete_one({ "_id" : user_id }) # Prepare the response if result.deleted_count > 0 # We return 204 No Content to imply resource updated successfully without returning # the deleted entity. resp.status_code = 204 return resp else: # Entity not found, perhaps already deleted, return 404 resp.status_code = 404 return resp except: # Something went wrong server side, so return Internal Server Error. resp.status_code = 500 return resp
Мы бы уточняли условие соответствия, на котором нужно удалить документ в этом организме. Например, мы хотели бы удалить документ с помощью ID
это 3
Как только пользователи будут удалены, мы вернем количество удаленных сообщений пользователей клиенту.
Страница обработки не найден запрос
Мы рекомендуем обрабатывать страницу не найден запрос с информативным сообщением для пользователя.
@app.errorhandler(404) def page_not_found(e): """Send message to user with notFound 404 status.""" # Message to the user message = { "message": "Message from the API", "errors": [ { "message": "This route is not currently supported. Please refer API documentation." } ] } # Make the message looks good resp = jsonify(message) # Send OK response resp.status_code = 404 # Return the object return resp
Если вы хотите играть по данным, вы также можете использовать оболочку Robo 3T Mongo.
Чтобы увидеть reзов API в действии, вы можете Git Clone и запустить этот пример AppRom Гадость
В следующем блоге мы узнали о том, как разрешать и аутентифицировать наши API. Если вам интересно начать работу с graphql с помощью python – пожалуйста, обратитесь к этому Блог Отказ Между тем, если у вас есть какие-либо вопросы, обратитесь к Команда Moesif
Оригинал: “https://dev.to/xngwng/guide-to-creating-a-restful-api-using-python-flask-and-mongodb-2566”