# Relax Programmatic DSL (Deprecated)

## Relax Programmatic DSL

Deprecated as of Relax 2.3, but still available, the Relax DSL configuration object which is mixed into a simple Relax CFC Definition Object so you can use all the methods in this CFC to define RESTful web services. All functions can be concatenated to create a programmatic DSL. This DSL is exportable to OpenAPI formats.

#### Example Using the Forgebox API:

```
this.relax = {
    // Service Title
    title = "ForgeBox IO",
    // Service Description
    description = "This API powers ForgeBox",
    // Service entry point, can be a single string or name value pairs to denote tiers
    //entryPoint = "http://www.myapi.com",
    entryPoint = {
        "production"     : "https://forgebox.io/api/v1",
        "staging"     : "http://forgebox.stg.ortussolutions.com/api/v1",
        "development"     : "http://localhost:9095/api/v1"
    },
    // Does it have extension detection via ColdBox
    extensionDetection = true,
    // Valid format extensions
    validExtensions = "json",
    // Does it throw exceptions when invalid extensions are detected
    throwOnInvalidExtension = false        
};

/************************************** GLOBAL PARAMS +  HEADERS *********************************************/

// Global API Headers
globalHeader( name="x-app-token", description="The secret application token", required=true, type="string" );

/************************************** RESOURCES *********************************************/

// ECHO
resource( pattern="/echo", handler="Main", action="echo" )
    .description( "Simple API echo command" )
    .defaultFormat( "json" )
    .methods( "GET" );
```

## Configuration

The relaxed service information. From here you will define the RESTful service endpoints, extension detection, valid formats, and more.

### Arguments

| Argument                      | Type | Required | Default                     | Description                                 |
| ----------------------------- | ---- | -------- | --------------------------- | ------------------------------------------- |
| title                         | any  | Yes      | ---                         | The title of the RESTful service            |
| description                   | any  | Yes      | ---                         | The description of the RESTful service      |
| entryPoint                    | any  | Yes      | ---                         | A simple URL or a structure of entry points |
| extensionDetection            | any  | No       | true                        | Will this API do extension detection        |
| validExtensions               | any  | No       | json,jsont,xml,html,htm,rss | The valid extensions to detect              |
| The valid extensions to detec | any  | No       | false                       | Throw on invalid extensions or not          |

## Global Headers

Add a global header to the relax definition

### Arguments

| Argument    | Type | Required | Default | Description                      |
| ----------- | ---- | -------- | ------- | -------------------------------- |
| name        | any  | Yes      | ---     | The name of the header           |
| description | any  | No       |         | The description of the header    |
| required    | any  | No       | false   | Is the header required or not    |
| default     | any  | No       |         | The default value of this header |
| type        | any  | No       | string  | The type of the incoming header  |

## Global Params

Add a global parameter to the relax definition

### Arguments

| Argument    | Type | Required | Default | Description                         |
| ----------- | ---- | -------- | ------- | ----------------------------------- |
| name        | any  | Yes      | ---     | The name of the parameter           |
| description | any  | No       |         | The description of the parameter    |
| required    | any  | No       | false   | Is the parameter required or not    |
| default     | any  | No       |         | The default value of this parameter |
| type        | any  | No       | string  | The type of the incoming parameter  |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://coldbox-relax.ortusbooks.com/relax-documentation-formats/index.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
