Skip to content

useApiUrl

A composable that provides access to and management of API URL configurations. It handles storing and retrieving the API base URL from localStorage and constructs the full API URL path.

Usage

ts
import { useApiUrl } from '#imports'

// Access the current API URL configuration
const { apiUrl, apiBaseUrl, endpoints } = useApiUrl()

// Change the API base URL (triggers page reload)
const { changeBaseUrl } = useApiUrl()
changeBaseUrl('https://new-api.example.com')

Type Signature

ts
function useApiUrl(): {
  apiUrl: ComputedRef<string>;
  baseUrl: Ref<string>;
  apiBaseUrl: ComputedRef<string>;
  endpoints: ComputedRef<string[]>;
  conf: ApiConfig;
  changeBaseUrl: (url: string) => void;
}

Return Value

PropertyTypeDescription
apiUrlComputedRef<string>The full API URL including the base URL and API suffix
baseUrlRef<string>The current stored base URL (from localStorage)
apiBaseUrlComputedRef<string>The resolved base URL (from localStorage or config)
endpointsComputedRef<string[]>List of available API endpoints from config
confApiConfigThe raw API configuration object
changeBaseUrl(url: string) => voidMethod to change the base URL and reload the page

Configuration

The composable uses the Nuxt runtime configuration to access API settings:

ts
// nuxt.config.ts
export default defineNuxtConfig({
  we: {
    api: {
      baseUrl: 'https://api.example.com',
      apiSuffix: 'api/v1',
      endpoints: ['https://api.example.com', 'https://api2.example.com']
    }
  }
})

Persistent Storage

The selected API base URL is stored in localStorage under the key we_nuxt_$api_baseUrl and persists across page reloads.

Endpoint switcher

We provide a pre-built component for switching API endpoints that leverages useApiUrl internally:

vue
<template>
  <div>
    <h3>Using the API Endpoint Switcher Component</h3>
    
    <we-endpoint-switcher>
      <template #activator="{ attrs }">
        <v-btn
          size="small"
          variant="outlined"
          v-bind="attrs"
        >
          Change <v-icon icon="mdi-easter" />
        </v-btn>
      </template>
    </we-endpoint-switcher>
  </div>
</template>

This component:

  • Handles displaying a dropdown/dialog to select available endpoints
  • Manages the API URL changes automatically
  • Uses the #activator slot to customize the trigger button
  • Provides necessary attributes via the scoped slot props

Source Code