Building a Simple RESTful API with Flask

0
Building a Simple RESTful API with Flask

Building a Simple RESTful API with Flask

In this guide, we will walk through the process of creating a simple RESTful API using Flask, a lightweight web framework for Python. By the end of this tutorial, you will have a basic understanding of how to set up Flask, define routes, handle HTTP methods, and test your API.

What is Flask?

Flask is a micro web framework for Python. It is lightweight, easy to use, and highly extensible. Flask is perfect for small to medium-sized applications and is often used for building APIs, web applications, and microservices.

Prerequisites

  • Python installed on your system
  • A code editor (e.g., VSCode, PyCharm)

Step 1: Install Flask

First, you need to install Flask. You can do this using pip:

pip install Flask

Step 2: Create the Flask Application

Create a new Python file, for example, app.py, and add the following code:

from flask import Flask, jsonify, request

app = Flask(__name__)

# Sample data
data = {
    "items": [
        {"id": 1, "name": "Item 1", "description": "Description of Item 1"},
        {"id": 2, "name": "Item 2", "description": "Description of Item 2"},
        {"id": 3, "name": "Item 3", "description": "Description of Item 3"}
    ]
}

# Route to get all items
@app.route('/items', methods=['GET'])
def get_items():
    return jsonify(data)

# Route to get a single item by ID
@app.route('/items/', methods=['GET'])
def get_item(item_id):
    item = next((item for item in data['items'] if item['id'] == item_id), None)
    if item:
        return jsonify(item)
    else:
        return jsonify({"error": "Item not found"}), 404

# Route to add a new item
@app.route('/items', methods=['POST'])
def add_item():
    new_item = request.get_json()
    if not new_item or 'name' not in new_item or 'description' not in new_item:
        return jsonify({"error": "Invalid request data"}), 400
    new_item['id'] = max(item['id'] for item in data['items']) + 1
    data['items'].append(new_item)
    return jsonify(new_item), 201

# Route to update an existing item
@app.route('/items/', methods=['PUT'])
def update_item(item_id):
    item = next((item for item in data['items'] if item['id'] == item_id), None)
    if not item:
        return jsonify({"error": "Item not found"}), 404
    update_data = request.get_json()
    item.update(update_data)
    return jsonify(item)

# Route to delete an item
@app.route('/items/', methods=['DELETE'])
def delete_item(item_id):
    item = next((item for item in data['items'] if item['id'] == item_id), None)
    if not item:
        return jsonify({"error": "Item not found"}), 404
    data['items'].remove(item)
    return jsonify({"message": "Item deleted"})

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

Step 3: Run the Flask Application

Run the Flask application by executing the following command in your terminal:

python app.py

Step 4: Test the API

You can test the API using tools like curl or Postman. Here are some example commands:

  • Get all items:
  • curl -X GET http://127.0.0.1:5000/items
  • Get a single item:
  • curl -X GET http://127.0.0.1:5000/items/1
  • Add a new item:
  • curl -X POST -H "Content-Type: application/json" -d '{"name": "Item 4", "description": "Description of Item 4"}' http://127.0.0.1:5000/items
  • Update an existing item:
  • curl -X PUT -H "Content-Type: application/json" -d '{"name": "Updated Item 1", "description": "Updated Description of Item 1"}' http://127.0.0.1:5000/items/1
  • Delete an item:
  • curl -X DELETE http://127.0.0.1:5000/items/1

Conclusion

In this guide, we have created a simple RESTful API using Flask. We covered setting up Flask, defining routes, handling HTTP methods, and testing the API. Flask's simplicity and flexibility make it an excellent choice for building APIs and web applications. You can now expand this basic API by adding more features, such as authentication, database integration, and more complex error handling.

Post a Comment

0Comments
Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Learn More
Accept !
✨ Updates