No description
Find a file
2025-04-15 23:38:46 +02:00
frontend added frontend and script examples 2025-04-15 23:33:44 +02:00
scripts added frontend and script examples 2025-04-15 23:33:44 +02:00
source ADD more demos 2025-04-15 23:38:46 +02:00
.dockerignore ignore files 2025-04-15 21:17:07 +02:00
.gitignore ignore files 2025-04-15 21:17:07 +02:00
CONTAINER_INSTRUCTIONS.md init 2025-04-15 21:16:46 +02:00
Dockerfile init 2025-04-15 21:16:46 +02:00
main.py added frontend and script examples 2025-04-15 23:33:44 +02:00
README.md added frontend and script examples 2025-04-15 23:33:44 +02:00
requirements.txt init 2025-04-15 21:16:46 +02:00
run_container.sh init 2025-04-15 21:16:46 +02:00

Static2API

A simple FastAPI application that automatically exposes CSV and JSON files as API endpoints.

Features

  • Automatically creates API endpoints for CSV and JSON files in the source directory
  • Files are accessible via /api/{filename} endpoints
  • New files are detected automatically without restarting the server
  • Runs in a secure container with Docker or Podman

Quick Start

Option 1: Run with Python

# Install dependencies
pip install -r requirements.txt

# Run the application
uvicorn main:app --reload

The API will be available at: http://localhost:8000

Option 2: Run with Docker/Podman

Use the provided script to run the application in a container:

# Make the script executable
chmod +x run_container.sh

# Run the container
./run_container.sh

The API will be available at: http://localhost:8000

API Endpoints

  • GET / - Welcome message
  • GET /api/{filename} - Access data from files in the source directory

Example:

  • GET /api/contacts - Returns data from source/contacts.csv
  • GET /api/users - Returns data from source/users.json

Sample Responses

CSV Example (from contacts.csv)

curl http://localhost:8000/api/contacts

Response:

[
  {
    "location": "dortmund",
    "contact": "achim"
  },
  {
    "location": "madrid",
    "contact": "santos"
  }
]

JSON Example (from users.json)

curl http://localhost:8000/api/users

Response:

{
  "users": [
    {
      "name": "John",
      "email": "john@example.com"
    },
    {
      "name": "Jane",
      "email": "jane@example.com"
    }
  ]
}

Adding New Files

  1. Place CSV or JSON files in the source directory
  2. Files will be automatically accessible via /api/{filename}
  3. No restart required

File Format Support

  • CSV files: Must have a header row with column names
  • JSON files: Must contain valid JSON data

Using the API in External Applications

Python Example

Here's how to consume the API data in a Python script:

import requests
import pandas as pd
from pprint import pprint

# Base URL of the API
API_BASE_URL = 'http://localhost:8000'

# Example 1: Get users data
response = requests.get(f"{API_BASE_URL}/api/users")
users_data = response.json()
pprint(users_data)

# Example 2: Get contacts and convert to DataFrame
response = requests.get(f"{API_BASE_URL}/api/contacts")
contacts_data = response.json()
contacts_df = pd.DataFrame(contacts_data)
print(contacts_df)

# Example 3: Extract specific information
contacts_response = requests.get(f"{API_BASE_URL}/api/contacts")
contacts = contacts_response.json()
locations = [contact['location'] for contact in contacts]
print(f"Available locations: {locations}")

# Example 4: Filtering data
users_response = requests.get(f"{API_BASE_URL}/api/users")
users_data = users_response.json()
filtered_users = [user for user in users_data.get('users', []) 
                 if user.get('name') == 'John']
print(f"Filtered users: {filtered_users}")

Output:

{'users': [{'name': 'John', 'email': 'john@example.com'}, 
           {'name': 'Jane', 'email': 'jane@example.com'}]}

  location contact
0 dortmund   achim
1   madrid  santos

Available locations: ['dortmund', 'madrid']

Filtered users: [{'name': 'John', 'email': 'john@example.com'}]

Manual Container Setup

Docker

# Build the image
docker build -t static2api:latest .

# Run the container
docker run --name static2api \
  -p 8000:8000 \
  -v "./source":/home/appuser/app/source \
  --security-opt no-new-privileges:true \
  --cap-drop ALL \
  --user 1000:1000 \
  -d static2api:latest

Podman

# Build the image
podman build -t static2api:latest .

# Run the container
podman run --name static2api \
  -p 8000:8000 \
  -v "./source":/home/appuser/app/source:Z \
  --security-opt no-new-privileges:true \
  --cap-drop ALL \
  --user 1000:1000 \
  -d static2api:latest

Container Management

View Logs

docker logs static2api
# or
podman logs static2api

Stop Container

docker stop static2api
# or
podman stop static2api

Remove Container

docker rm static2api
# or
podman rm static2api