Skip to content

Latest commit

 

History

History
231 lines (193 loc) · 5.04 KB

File metadata and controls

231 lines (193 loc) · 5.04 KB

🔧 REST API Templates

📚 Database Operations: Complete CRUD examples are in database/03-COMPLETE-EXAMPLES.md

📚 Utility Functions: All helper functions are in utilities/01-ESSENTIAL-UTILITIES.md

Complete CRUD API Examples

Note: These examples show the complete flow. For detailed database operations, see the database folder.

Create Resource

//export createResource
func createResource(e event.Event) uint32 {
    h, err := e.HTTP()
    if err != nil {
        return 1
    }
    setCORSHeaders(h)

    // Read request body
    body, err := io.ReadAll(h.Body())
    if err != nil {
        h.Write([]byte("Failed to read request body"))
        h.Return(400)
        return 1
    }

    // Get database connection
    db, err := database.New("/data")
    if err != nil {
        return handleHTTPError(h, err, 500)
    }
    defer db.Close()

    // Generate unique key
    key := fmt.Sprintf("/resource/%d", time.Now().UnixNano())

    // Store data
    err = db.Put(key, body)
    if err != nil {
        h.Write([]byte("Failed to store data"))
        h.Return(500)
        return 1
    }

    response := map[string]string{"id": key, "status": "created"}
    return sendJSONResponse(h, response)
}

Get Resource

//export getResource
func getResource(e event.Event) uint32 {
    h, err := e.HTTP()
    if err != nil {
        return 1
    }
    setCORSHeaders(h)

    // Get resource ID from path
    id, err := h.Path().Get("id")
    if err != nil {
        h.Write([]byte("Missing resource ID"))
        h.Return(400)
        return 1
    }

    // Get database connection
    db, err := database.New("/data")
    if err != nil {
        return handleHTTPError(h, err, 500)
    }
    defer db.Close()

    // Get data
    data, err := db.Get(fmt.Sprintf("/resource/%s", id))
    if err != nil {
        h.Write([]byte("Resource not found"))
        h.Return(404)
        return 1
    }

    h.Headers().Set("Content-Type", "application/json")
    h.Write(data)
    h.Return(200)
    return 0
}

List Resources

//export listResources
func listResources(e event.Event) uint32 {
    h, err := e.HTTP()
    if err != nil {
        return 1
    }
    setCORSHeaders(h)

    // Get database connection
    db, err := database.New("/data")
    if err != nil {
        return handleHTTPError(h, err, 500)
    }
    defer db.Close()

    // List all resources
    keys, err := db.List("/resource/")
    if err != nil {
        h.Write([]byte("Failed to list resources"))
        h.Return(500)
        return 1
    }

    return sendJSONResponse(h, keys)
}

Update Resource

//export updateResource
func updateResource(e event.Event) uint32 {
    h, err := e.HTTP()
    if err != nil {
        return 1
    }
    setCORSHeaders(h)

    // Get resource ID from path
    id, err := h.Path().Get("id")
    if err != nil {
        h.Write([]byte("Missing resource ID"))
        h.Return(400)
        return 1
    }

    // Read request body
    body, err := io.ReadAll(h.Body())
    if err != nil {
        h.Write([]byte("Failed to read request body"))
        h.Return(400)
        return 1
    }

    // Get database connection
    db, err := database.New("/data")
    if err != nil {
        return handleHTTPError(h, err, 500)
    }
    defer db.Close()

    // Check if resource exists
    _, err = db.Get(fmt.Sprintf("/resource/%s", id))
    if err != nil {
        h.Write([]byte("Resource not found"))
        h.Return(404)
        return 1
    }

    // Update data
    err = db.Put(fmt.Sprintf("/resource/%s", id), body)
    if err != nil {
        h.Write([]byte("Failed to update resource"))
        h.Return(500)
        return 1
    }

    response := map[string]string{"id": id, "status": "updated"}
    return sendJSONResponse(h, response)
}

Delete Resource

//export deleteResource
func deleteResource(e event.Event) uint32 {
    h, err := e.HTTP()
    if err != nil {
        return 1
    }
    setCORSHeaders(h)

    // Get resource ID from path
    id, err := h.Path().Get("id")
    if err != nil {
        h.Write([]byte("Missing resource ID"))
        h.Return(400)
        return 1
    }

    // Get database connection
    db, err := database.New("/data")
    if err != nil {
        return handleHTTPError(h, err, 500)
    }
    defer db.Close()

    // Check if resource exists
    _, err = db.Get(fmt.Sprintf("/resource/%s", id))
    if err != nil {
        h.Write([]byte("Resource not found"))
        h.Return(404)
        return 1
    }

    // Delete data
    err = db.Delete(fmt.Sprintf("/resource/%s", id))
    if err != nil {
        h.Write([]byte("Failed to delete resource"))
        h.Return(500)
        return 1
    }

    h.Write([]byte("Resource deleted successfully"))
    h.Return(200)
    return 0
}

📚 Next Steps