---
url: >-
  https://canary.warp-drive.io/api/@warp-drive/legacy/adapter/rest/classes/RESTAdapter.md
description: >-
  Legacy adapter that exchanges conventional REST-style JSON with an HTTP
  server, building URLs from model names and ids.
---

&#x20;

# &#x20;RESTAdapter

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:366](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L366)

:::danger
⚠️ **This is LEGACY documentation** for a feature that is no longer encouraged to be used.
If starting a new app or thinking of implementing a new adapter, consider writing a
Handler instead to be used with the [RequestManager](../../../../core/classes/RequestManager.md)
:::

The REST adapter allows your store to communicate with an HTTP server by
transmitting JSON via XHR.

This adapter is designed around the idea that the JSON exchanged with
the server should be conventional. It builds URLs in a manner that follows
the structure of most common REST-style web services.

## Success and failure

The REST adapter will consider a success any response with a status code
of the 2xx family ("Success"), as well as 304 ("Not Modified"). Any other
status code will be considered a failure.

On success, the request promise will be resolved with the full response
payload.

Failed responses with status code 422 ("Unprocessable Entity") will be
considered "invalid". The response will be discarded, except for the
`errors` key. The request promise will be rejected with a `InvalidError`.
This error object will encapsulate the saved `errors` value.

Any other status codes will be treated as an "adapter error". The request
promise will be rejected, similarly to the "invalid" case, but with
an instance of `AdapterError` instead.

## JSON Structure

The REST adapter expects the JSON returned from your server to follow
these conventions.

### Object Root

The JSON payload should be an object that contains the record inside a
root property. For example, in response to a `GET` request for
`/posts/1`, the JSON should look like this:

```js
{
  "posts": {
    "id": 1,
    "title": "I'm Running to Reform the W3C",
    "author": "Yehuda Katz"
  }
}
```

Similarly, in response to a `GET` request for `/posts`, the JSON should
look like this:

```js
{
  "posts": [
    {
      "id": 1,
      "title": "I'm Running to Reform the W3C",
      "author": "Yehuda Katz"
    },
    {
      "id": 2,
      "title": "Rails is omakase",
      "author": "D2H"
    }
  ]
}
```

Note that the object root can be pluralized for both a single-object response
and an array response: the REST adapter is not strict on this. Further, if the
HTTP server responds to a `GET` request to `/posts/1` (e.g. the response to a
`findRecord` query) with more than one object in the array, WarpDrive will
only display the object with the matching ID.

### Conventional Names

Attribute names in your JSON payload should be the camelCased versions of
the attributes in your Ember.js models.

For example, if you have a `Person` model:

```js [app/models/person.js]
import { Model, attr } from '@warp-drive/legacy/model';

export default Model.extend({
  firstName: attr('string'),
  lastName: attr('string'),
  occupation: attr('string')
});
```

The JSON returned should look like this:

```js
{
  "people": {
    "id": 5,
    "firstName": "Zaphod",
    "lastName": "Beeblebrox",
    "occupation": "President"
  }
}
```

#### Relationships

Relationships are usually represented by ids to the record in the
relationship. The related records can then be sideloaded in the
response under a key for the type.

```js
{
  "posts": {
    "id": 5,
    "title": "I'm Running to Reform the W3C",
    "author": "Yehuda Katz",
    "comments": [1, 2]
  },
  "comments": [{
    "id": 1,
    "author": "User 1",
    "message": "First!",
  }, {
    "id": 2,
    "author": "User 2",
    "message": "Good Luck!",
  }]
}
```

If the records in the relationship are not known when the response
is serialized it's also possible to represent the relationship as a
URL using the `links` key in the response. WarpDrive will fetch
this URL to resolve the relationship when it is accessed for the
first time.

```js
{
  "posts": {
    "id": 5,
    "title": "I'm Running to Reform the W3C",
    "author": "Yehuda Katz",
    "links": {
      "comments": "/posts/5/comments"
    }
  }
}
```

### Errors

If a response is considered a failure, the JSON payload is expected to include
a top-level key `errors`, detailing any specific issues. For example:

```js
{
  "errors": {
    "msg": "Something went wrong"
  }
}
```

This adapter does not make any assumptions as to the format of the `errors`
object. It will simply be passed along as is, wrapped in an instance
of `InvalidError` or `AdapterError`. The serializer can interpret it
afterwards.

## Customization

### Endpoint path customization

Endpoint paths can be prefixed with a `namespace` by setting the namespace
property on the adapter:

```js [app/adapters/application.js]
import { RESTAdapter } from '@warp-drive/legacy/adapter/rest';

export default class ApplicationAdapter extends RESTAdapter {
  namespace = 'api/1';
}
```

Requests for the `Person` model would now target `/api/1/people/1`.

### Host customization

An adapter can target other hosts by setting the `host` property.

```js [app/adapters/application.js]
import { RESTAdapter } from '@warp-drive/legacy/adapter/rest';

export default class ApplicationAdapter extends RESTAdapter {
  host = 'https://api.example.com';
}
```

### Headers customization

Some APIs require HTTP headers, e.g. to provide an API key. Arbitrary
headers can be set as key/value pairs on the `RESTAdapter`'s `headers`
object and WarpDrive will send them along with each ajax request.

```js [app/adapters/application.js]
import { RESTAdapter } from '@warp-drive/legacy/adapter/rest';

export default class ApplicationAdapter extends RESTAdapter {
  get headers() {
    return {
      'API_KEY': 'secret key',
      'ANOTHER_HEADER': 'Some header value'
    };
  }
}
```

## Extends

* `AdapterWithBuildURLMixin`.`MixtBuildURLMixin`

## Extended by

* [`JSONAPIAdapter`](../../json-api/classes/JSONAPIAdapter.md)

## Constructors

### Constructor

```ts
new RESTAdapter(owner?: Owner): RESTAdapter;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:139](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L139)

#### Parameters

##### owner?

`Owner`

#### Returns

`RESTAdapter`

#### Inherited from

```ts
AdapterWithBuildURLMixin.constructor
```

## Methods

### buildQuery()

```ts
buildQuery(snapshot: Snapshot<unknown> | SnapshotRecordArray): QueryState;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:1259](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L1259)

Used by `findAll` and `findRecord` to build the query's `data` hash
supplied to the ajax method.

#### Parameters

##### snapshot

`Snapshot`<`unknown`> | `SnapshotRecordArray`

#### Returns

[`QueryState`](../types/QueryState.md)

***

### buildURL()

```ts
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string, 
   snapshot: Snapshot, 
   requestType: "findRecord"
): string;
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: null, 
   snapshot: SnapshotRecordArray, 
   requestType: "findAll"
): string;
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: null, 
   snapshot: null, 
   requestType: "query", 
   query: Record<string, unknown>
): string;
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: null, 
   snapshot: null, 
   requestType: "queryRecord", 
   query: Record<string, unknown>
): string;
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string[], 
   snapshot: Snapshot<unknown>[], 
   requestType: "findMany"
): string;
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string, 
   snapshot: Snapshot, 
   requestType: "findHasMany"
): string;
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string, 
   snapshot: Snapshot, 
   requestType: "findBelongsTo"
): string;
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string | null, 
   snapshot: Snapshot, 
   requestType: "createRecord"
): string;
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string, 
   snapshot: Snapshot, 
   requestType: "updateRecord"
): string;
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string, 
   snapshot: Snapshot, 
   requestType: "deleteRecord"
): string;
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string, 
   snapshot: Snapshot
): string;
```

#### Call Signature

```ts
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string, 
   snapshot: Snapshot, 
   requestType: "findRecord"
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:44](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L44)

Builds a URL for a given type and optional ID.

By default, it pluralizes the type's name (for example, 'post'
becomes 'posts' and 'person' becomes 'people'). To override the
pluralization see [pathForType](../../types/BuildURLMixin.md#pathfortype).

If an ID is specified, it adds the ID to the path generated
for the type, separated by a `/`.

This overload builds the URL for a `store.findRecord(type, id)` call.

##### Parameters

###### this

`MixtBuildURLMixin`

###### modelName

`string`

###### id

`string`

###### snapshot

`Snapshot`

###### requestType

`"findRecord"`

##### Returns

`string`

#### Call Signature

```ts
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: null, 
   snapshot: SnapshotRecordArray, 
   requestType: "findAll"
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:56](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L56)

Builds the URL for a `store.findAll(type)` call.

##### Parameters

###### this

`MixtBuildURLMixin`

###### modelName

`string`

###### id

`null`

###### snapshot

`SnapshotRecordArray`

###### requestType

`"findAll"`

##### Returns

`string`

#### Call Signature

```ts
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: null, 
   snapshot: null, 
   requestType: "query", 
   query: Record<string, unknown>
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:68](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L68)

Builds the URL for a `store.query(type, query)` call.

##### Parameters

###### this

`MixtBuildURLMixin`

###### modelName

`string`

###### id

`null`

###### snapshot

`null`

###### requestType

`"query"`

###### query

[`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)<`string`, `unknown`>

##### Returns

`string`

#### Call Signature

```ts
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: null, 
   snapshot: null, 
   requestType: "queryRecord", 
   query: Record<string, unknown>
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:81](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L81)

Builds the URL for a `store.queryRecord(type, query)` call.

##### Parameters

###### this

`MixtBuildURLMixin`

###### modelName

`string`

###### id

`null`

###### snapshot

`null`

###### requestType

`"queryRecord"`

###### query

[`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)<`string`, `unknown`>

##### Returns

`string`

#### Call Signature

```ts
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string[], 
   snapshot: Snapshot<unknown>[], 
   requestType: "findMany"
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:97](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L97)

Builds the URL for coalescing multiple `store.findRecord(type, id)`
records into 1 request when the adapter's `coalesceFindRequests`
property is `true`. The `id` and `snapshot` parameters will be
arrays of ids and snapshots.

##### Parameters

###### this

`MixtBuildURLMixin`

###### modelName

`string`

###### id

`string`\[]

###### snapshot

`Snapshot`<`unknown`>\[]

###### requestType

`"findMany"`

##### Returns

`string`

#### Call Signature

```ts
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string, 
   snapshot: Snapshot, 
   requestType: "findHasMany"
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:110](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L110)

Builds the URL for fetching an async `hasMany` relationship when a
URL is not provided by the server.

##### Parameters

###### this

`MixtBuildURLMixin`

###### modelName

`string`

###### id

`string`

###### snapshot

`Snapshot`

###### requestType

`"findHasMany"`

##### Returns

`string`

#### Call Signature

```ts
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string, 
   snapshot: Snapshot, 
   requestType: "findBelongsTo"
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:123](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L123)

Builds the URL for fetching an async `belongsTo` relationship when a
URL is not provided by the server.

##### Parameters

###### this

`MixtBuildURLMixin`

###### modelName

`string`

###### id

`string`

###### snapshot

`Snapshot`

###### requestType

`"findBelongsTo"`

##### Returns

`string`

#### Call Signature

```ts
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string | null, 
   snapshot: Snapshot, 
   requestType: "createRecord"
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:136](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L136)

Builds the URL for a `record.save()` call when the record was
created locally using `store.createRecord()`.

##### Parameters

###### this

`MixtBuildURLMixin`

###### modelName

`string`

###### id

`string` | `null`

###### snapshot

`Snapshot`

###### requestType

`"createRecord"`

##### Returns

`string`

#### Call Signature

```ts
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string, 
   snapshot: Snapshot, 
   requestType: "updateRecord"
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:149](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L149)

Builds the URL for a `record.save()` call when the record has been
updated locally.

##### Parameters

###### this

`MixtBuildURLMixin`

###### modelName

`string`

###### id

`string`

###### snapshot

`Snapshot`

###### requestType

`"updateRecord"`

##### Returns

`string`

#### Call Signature

```ts
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string, 
   snapshot: Snapshot, 
   requestType: "deleteRecord"
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:162](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L162)

Builds the URL for a `record.save()` call when the record has been
deleted locally.

##### Parameters

###### this

`MixtBuildURLMixin`

###### modelName

`string`

###### id

`string`

###### snapshot

`Snapshot`

###### requestType

`"deleteRecord"`

##### Returns

`string`

#### Call Signature

```ts
buildURL(
   this: MixtBuildURLMixin, 
   modelName: string, 
   id: string, 
   snapshot: Snapshot
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:174](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L174)

Builds a URL for a given type and ID without a specific request type.

##### Parameters

###### this

`MixtBuildURLMixin`

###### modelName

`string`

###### id

`string`

###### snapshot

`Snapshot`

##### Returns

`string`

***

### createRecord()

```ts
createRecord(
   store: Store$1, 
   type: ModelSchema, 
   snapshot: Snapshot
): Promise<AdapterPayload>;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:818](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L818)

Called by the store when a newly created record is
saved via the `save` method on a model record instance.

The `createRecord` method serializes the record and makes an Ajax (HTTP POST) request
to a URL computed by `buildURL`.

See `serialize` for information on how to customize the serialized form
of a record.

#### Parameters

##### store

`Store$1`

##### type

`ModelSchema`

##### snapshot

`Snapshot`

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[`AdapterPayload`](../../../compat/types/AdapterPayload.md)>

#### Overrides

```ts
AdapterWithBuildURLMixin.createRecord
```

***

### deleteRecord()

```ts
deleteRecord(
   store: Store$1, 
   schema: ModelSchema, 
   snapshot: Snapshot
): Promise<AdapterPayload>;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:855](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L855)

Called by the store when a record is deleted.

The `deleteRecord` method  makes an Ajax (HTTP DELETE) request to a URL computed by `buildURL`.

#### Parameters

##### store

`Store$1`

##### schema

`ModelSchema`

##### snapshot

`Snapshot`

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[`AdapterPayload`](../../../compat/types/AdapterPayload.md)>

#### Overrides

```ts
AdapterWithBuildURLMixin.deleteRecord
```

***

### findAll()

```ts
findAll(
   store: Store$1, 
   type: ModelSchema, 
   neverUsed: null, 
   snapshotRecordArray: SnapshotRecordArray
): Promise<AdapterPayload>;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:617](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L617)

Called by the store in order to fetch a JSON array for all
of the records for a given type.

The `findAll` method makes an Ajax (HTTP GET) request to a URL computed by `buildURL`, and returns a
promise for the resulting payload.

#### Parameters

##### store

`Store$1`

##### type

`ModelSchema`

##### neverUsed

`null`

##### snapshotRecordArray

`SnapshotRecordArray`

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[`AdapterPayload`](../../../compat/types/AdapterPayload.md)>

#### Overrides

```ts
AdapterWithBuildURLMixin.findAll
```

***

### findBelongsTo()

```ts
findBelongsTo(
   store: Store$1, 
   snapshot: Snapshot, 
   url: string, 
   relationship: unknown
): Promise<AdapterPayload>;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:794](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L794)

Called by the store in order to fetch the JSON for the unloaded record in a
belongs-to relationship that was originally specified as a URL (inside of
`links`).

For example, if your original payload looks like this:

```js
{
  "person": {
    "id": 1,
    "name": "Tom Dale",
    "links": { "group": "/people/1/group" }
  }
}
```

This method will be called with the parent record and `/people/1/group`.

The `findBelongsTo` method will make an Ajax (HTTP GET) request to the originally specified URL.

The format of your `links` value will influence the final request URL via the `urlPrefix` method:

* Links beginning with `//`, `http://`, `https://`, will be used as is, with no further manipulation.

* Links beginning with a single `/` will have the current adapter's `host` value prepended to it.

* Links with no beginning `/` will have a parentURL prepended to it, via the current adapter's `buildURL`.

#### Parameters

##### store

`Store$1`

##### snapshot

`Snapshot`

##### url

`string`

##### relationship

`unknown`

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[`AdapterPayload`](../../../compat/types/AdapterPayload.md)>

***

### findHasMany()

```ts
findHasMany(
   store: Store$1, 
   snapshot: Snapshot, 
   url: string, 
   relationship: Record<string, unknown>
): Promise<AdapterPayload>;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:745](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L745)

Called by the store in order to fetch a JSON array for
the unloaded records in a has-many relationship that were originally
specified as a URL (inside of `links`).

For example, if your original payload looks like this:

```js
{
  "post": {
    "id": 1,
    "title": "Rails is omakase",
    "links": { "comments": "/posts/1/comments" }
  }
}
```

This method will be called with the parent record and `/posts/1/comments`.

The `findHasMany` method will make an Ajax (HTTP GET) request to the originally specified URL.

The format of your `links` value will influence the final request URL via the `urlPrefix` method:

* Links beginning with `//`, `http://`, `https://`, will be used as is, with no further manipulation.

* Links beginning with a single `/` will have the current adapter's `host` value prepended to it.

* Links with no beginning `/` will have a parentURL prepended to it, via the current adapter's `buildURL`.

#### Parameters

##### store

`Store$1`

##### snapshot

`Snapshot`

##### url

`string`

##### relationship

[`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)<`string`, `unknown`>

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[`AdapterPayload`](../../../compat/types/AdapterPayload.md)>

***

### findMany()

```ts
findMany(
   store: Store$1, 
   type: ModelSchema, 
   ids: string[], 
   snapshots: Snapshot<unknown>[]
): Promise<AdapterPayload>;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:709](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L709)

Called by the store in order to fetch several records together if `coalesceFindRequests` is true

For example, if the original payload looks like:

```js
{
  "id": 1,
  "title": "Rails is omakase",
  "comments": [ 1, 2, 3 ]
}
```

The IDs will be passed as a URL-encoded Array of IDs, in this form:

```
ids[]=1&ids[]=2&ids[]=3
```

Many servers, such as Rails and PHP, will automatically convert this URL-encoded array
into an Array for you on the server-side. If you want to encode the
IDs, differently, just override this (one-line) method.

The `findMany` method makes an Ajax (HTTP GET) request to a URL computed by `buildURL`, and returns a
promise for the resulting payload.

#### Parameters

##### store

`Store$1`

##### type

`ModelSchema`

##### ids

`string`\[]

##### snapshots

`Snapshot`<`unknown`>\[]

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[`AdapterPayload`](../../../compat/types/AdapterPayload.md)>

***

### findRecord()

```ts
findRecord(
   store: Store$1, 
   type: ModelSchema, 
   id: string, 
   snapshot: Snapshot
): Promise<AdapterPayload>;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:601](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L601)

Called by the store in order to fetch the JSON for a given
type and ID.

The `findRecord` method makes an Ajax request to a URL computed by
`buildURL`, and returns a promise for the resulting payload.

This method performs an HTTP `GET` request with the id provided as part of the query string.

#### Parameters

##### store

`Store$1`

##### type

`ModelSchema`

##### id

`string`

##### snapshot

`Snapshot`

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[`AdapterPayload`](../../../compat/types/AdapterPayload.md)>

#### Overrides

```ts
AdapterWithBuildURLMixin.findRecord
```

***

### groupRecordsForFindMany()

```ts
groupRecordsForFindMany(store: Store$1, snapshots: Snapshot<unknown>[]): Snapshot<unknown>[][];
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:922](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L922)

Organize records into groups, each of which is to be passed to separate
calls to `findMany`.

This implementation groups together records that have the same base URL but
differing ids. For example `/comments/1` and `/comments/2` will be grouped together
because we know findMany can coalesce them together as `/comments?ids[]=1&ids[]=2`

It also supports urls where ids are passed as a query param, such as `/comments?id=1`
but not those where there is more than 1 query param such as `/comments?id=2&name=David`
Currently only the query param of `id` is supported. If you need to support others, please
override this or the `_stripIDFromURL` method.

It does not group records that have differing base urls, such as for example: `/posts/1/comments/2`
and `/posts/2/comments/3`

#### Parameters

##### store

`Store$1`

##### snapshots

`Snapshot`<`unknown`>\[]

#### Returns

`Snapshot`<`unknown`>\[]\[]

an array of arrays of records, each of which is to be
loaded separately by `findMany`.

#### Overrides

```ts
AdapterWithBuildURLMixin.groupRecordsForFindMany
```

***

### handleResponse()

```ts
handleResponse(
   status: number, 
   headers: Record<string, string>, 
   payload: Payload, 
   requestData: RequestData
): 
  | AdapterRequestErrorConstructor<AdapterError>
  | Payload;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:970](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L970)

Takes an ajax response, and returns the json payload or an error.

By default this hook just returns the json payload passed to it.
You might want to override it in two cases:

1. Your API might return useful results in the response headers.
   Response headers are passed in as the second argument.

2. Your API might return errors as successful responses with status code
   200 and an Errors text or object. You can return a `InvalidError` or a
   `AdapterError` (or a sub class) from this hook and it will automatically
   reject the promise and put your record into the invalid or error state.

Returning a `InvalidError` from this method will cause the
record to transition into the `invalid` state and make the
`errors` object available on the record. When returning an
`InvalidError` the store will attempt to normalize the error data
returned from the server using the serializer's `extractErrors`
method.

#### Parameters

##### status

`number`

##### headers

[`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)<`string`, `string`>

##### payload

`Payload`

##### requestData

[`RequestData`](../types/RequestData.md)

#### Returns

| [`AdapterRequestErrorConstructor`](../../error/types/AdapterRequestErrorConstructor.md)<[`AdapterError`](../../error/types/AdapterError.md)>
| `Payload`

***

### isInvalid()

```ts
isInvalid(
   status: number, 
   _headers: Record<string, unknown>, 
   _payload: Payload
): boolean;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:1024](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L1024)

Default `handleResponse` implementation uses this hook to decide if the
response is an invalid error.

#### Parameters

##### status

`number`

##### \_headers

[`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)<`string`, `unknown`>

##### \_payload

`Payload`

#### Returns

`boolean`

***

### isSuccess()

```ts
isSuccess(
   status: number, 
   _headers: Record<string, unknown>, 
   _payload: Payload
): boolean;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:1013](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L1013)

Default `handleResponse` implementation uses this hook to decide if the
response is a success.

#### Parameters

##### status

`number`

##### \_headers

[`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)<`string`, `unknown`>

##### \_payload

`Payload`

#### Returns

`boolean`

***

### pathForType()

```ts
pathForType(this: MixtBuildURLMixin, modelName: string): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:258](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L258)

Determines the pathname for a given type.

By default, it pluralizes the type's name (for example, 'post'
becomes 'posts' and 'person' becomes 'people').

#### Parameters

##### this

`MixtBuildURLMixin`

##### modelName

`string`

#### Returns

`string`

***

### query()

```ts
query(
   store: Store$1, 
   type: ModelSchema, 
   query: Record<string, unknown>
): Promise<AdapterPayload>;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:642](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L642)

Called by the store in order to fetch a JSON array for
the records that match a particular query.

The `query` method makes an Ajax (HTTP GET) request to a URL
computed by `buildURL`, and returns a promise for the resulting
payload.

The `query` argument is a simple JavaScript object that will be passed directly
to the server as parameters.

#### Parameters

##### store

`Store$1`

##### type

`ModelSchema`

##### query

[`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)<`string`, `unknown`>

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[`AdapterPayload`](../../../compat/types/AdapterPayload.md)>

#### Overrides

```ts
AdapterWithBuildURLMixin.query
```

***

### queryRecord()

```ts
queryRecord(
   store: Store$1, 
   type: ModelSchema, 
   query: Record<string, unknown>, 
   adapterOptions: Record<string, unknown>
): Promise<AdapterPayload>;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:666](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L666)

Called by the store in order to fetch a JSON object for
the record that matches a particular query.

The `queryRecord` method makes an Ajax (HTTP GET) request to a URL
computed by `buildURL`, and returns a promise for the resulting
payload.

The `query` argument is a simple JavaScript object that will be passed directly
to the server as parameters.

#### Parameters

##### store

`Store$1`

##### type

`ModelSchema`

##### query

[`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)<`string`, `unknown`>

##### adapterOptions

[`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)<`string`, `unknown`>

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[`AdapterPayload`](../../../compat/types/AdapterPayload.md)>

#### Overrides

```ts
AdapterWithBuildURLMixin.queryRecord
```

***

### serialize()

```ts
serialize(snapshot: Snapshot, options: SerializerOptions): Record<string, unknown>;
```

Defined in: [warp-drive-packages/legacy/src/adapter.ts:500](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter.ts#L500)

Proxies to the serializer's `serialize` method.

Example

```js [app/adapters/application.js]
import { Adapter } from '@warp-drive/legacy/adapter';

export default class ApplicationAdapter extends Adapter {
  createRecord(store, type, snapshot) {
    let data = this.serialize(snapshot, { includeId: true });
    let url = `/${type.modelName}`;

    // ...
  }
}
```

#### Parameters

##### snapshot

`Snapshot`

##### options

[`SerializerOptions`](../../../compat/types/SerializerOptions.md)

#### Returns

[`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)<`string`, `unknown`>

#### Inherited from

```ts
AdapterWithBuildURLMixin.serialize
```

***

### shouldBackgroundReloadAll()

```ts
shouldBackgroundReloadAll(store: Store$1, snapshotRecordArray: SnapshotRecordArray): boolean;
```

Defined in: [warp-drive-packages/legacy/src/adapter.ts:907](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter.ts#L907)

This method is used by the store to determine if the store should
reload a record array after the `store.findAll` method resolves
with a cached record array.

This method is *only* checked by the store when the store is
returning a cached record array.

If this method returns `true` the store will re-fetch all records
from the adapter.

For example, if you do not want to fetch complex data over a mobile
connection, or if the network is down, you can implement
`shouldBackgroundReloadAll` as follows:

```javascript
shouldBackgroundReloadAll(store, snapshotArray) {
  let { downlink, effectiveType } = navigator.connection;

  return downlink > 0 && effectiveType === '4g';
}
```

By default this method returns `true`, indicating that a background reload
should always be triggered.

#### Parameters

##### store

`Store$1`

##### snapshotRecordArray

`SnapshotRecordArray`

#### Returns

`boolean`

#### Inherited from

```ts
AdapterWithBuildURLMixin.shouldBackgroundReloadAll
```

***

### shouldBackgroundReloadRecord()

```ts
shouldBackgroundReloadRecord(store: Store$1, snapshot: Snapshot): boolean;
```

Defined in: [warp-drive-packages/legacy/src/adapter.ts:871](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter.ts#L871)

This method is used by the store to determine if the store should
reload a record after the `store.findRecord` method resolves a
cached record.

This method is *only* checked by the store when the store is
returning a cached record.

If this method returns `true` the store will re-fetch a record from
the adapter.

For example, if you do not want to fetch complex data over a mobile
connection, or if the network is down, you can implement
`shouldBackgroundReloadRecord` as follows:

```javascript
shouldBackgroundReloadRecord(store, snapshot) {
  let { downlink, effectiveType } = navigator.connection;

  return downlink > 0 && effectiveType === '4g';
}
```

By default, this hook returns `true` so the data for the record is updated
in the background.

#### Parameters

##### store

`Store$1`

##### snapshot

`Snapshot`

#### Returns

`boolean`

#### Inherited from

```ts
AdapterWithBuildURLMixin.shouldBackgroundReloadRecord
```

***

### shouldReloadAll()

```ts
shouldReloadAll(store: Store$1, snapshotRecordArray: SnapshotRecordArray): boolean;
```

Defined in: [warp-drive-packages/legacy/src/adapter.ts:835](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter.ts#L835)

This method is used by the store to determine if the store should
reload all records from the adapter when records are requested by
`store.findAll`.

If this method returns `true`, the store will re-fetch all records from
the adapter. If this method returns `false`, the store will resolve
immediately using the cached records.

For example, if you are building an events ticketing system, in which users
can only reserve tickets for 20 minutes at a time, and want to ensure that
in each route you have data that is no more than 20 minutes old you could
write:

```javascript
shouldReloadAll(store, snapshotArray) {
  let snapshots = snapshotArray.snapshots();

  return snapshots.any((ticketSnapshot) => {
    let lastAccessedAt = ticketSnapshot.attr('lastAccessedAt');
    let timeDiff = moment().diff(lastAccessedAt, 'minutes');

    if (timeDiff > 20) {
      return true;
    } else {
      return false;
    }
  });
}
```

This method would ensure that whenever you do `store.findAll('ticket')` you
will always get a list of tickets that are no more than 20 minutes old. In
case a cached version is more than 20 minutes old, `findAll` will not
resolve until you fetched the latest versions.

By default, this method returns `true` if the passed `snapshotRecordArray`
is empty (meaning that there are no records locally available yet),
otherwise, it returns `false`.

Note that, with default settings, `shouldBackgroundReloadAll` will always
re-fetch all the records in the background even if `shouldReloadAll` returns
`false`. You can override `shouldBackgroundReloadAll` if this does not suit
your use case.

#### Parameters

##### store

`Store$1`

##### snapshotRecordArray

`SnapshotRecordArray`

#### Returns

`boolean`

#### Inherited from

```ts
AdapterWithBuildURLMixin.shouldReloadAll
```

***

### shouldReloadRecord()

```ts
shouldReloadRecord(store: Store$1, snapshot: Snapshot): boolean;
```

Defined in: [warp-drive-packages/legacy/src/adapter.ts:780](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter.ts#L780)

This method is used by the store to determine if the store should
reload a record from the adapter when a record is requested by
`store.findRecord`.

If this method returns `true`, the store will re-fetch a record from
the adapter. If this method returns `false`, the store will resolve
immediately using the cached record.

For example, if you are building an events ticketing system, in which users
can only reserve tickets for 20 minutes at a time, and want to ensure that
in each route you have data that is no more than 20 minutes old you could
write:

```javascript
shouldReloadRecord(store, ticketSnapshot) {
  let lastAccessedAt = ticketSnapshot.attr('lastAccessedAt');
  let timeDiff = moment().diff(lastAccessedAt, 'minutes');

  if (timeDiff > 20) {
    return true;
  } else {
    return false;
  }
}
```

This method would ensure that whenever you do `store.findRecord('ticket',
id)` you will always get a ticket that is no more than 20 minutes old. In
case the cached version is more than 20 minutes old, `findRecord` will not
resolve until you fetched the latest version.

By default this hook returns `false`, as most UIs should not block user
interactions while waiting on data update.

Note that, with default settings, `shouldBackgroundReloadRecord` will always
re-fetch the records in the background even if `shouldReloadRecord` returns
`false`. You can override `shouldBackgroundReloadRecord` if this does not
suit your use case.

#### Parameters

##### store

`Store$1`

##### snapshot

`Snapshot`

#### Returns

`boolean`

#### Inherited from

```ts
AdapterWithBuildURLMixin.shouldReloadRecord
```

***

### sortQueryParams()

```ts
sortQueryParams(obj: Record<string, unknown>): Record<string, unknown>;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:460](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L460)

By default, the RESTAdapter will send the query params sorted alphabetically to the
server.

For example:

```js
store.query('posts', { sort: 'price', category: 'pets' });
```

will generate a requests like this `/posts?category=pets&sort=price`, even if the
parameters were specified in a different order.

That way the generated URL will be deterministic and that simplifies caching mechanisms
in the backend.

Setting `sortQueryParams` to a falsey value will respect the original order.

In case you want to sort the query parameters with a different criteria, set
`sortQueryParams` to your custom sort function.

```js [app/adapters/application.js]
import { RESTAdapter } from '@warp-drive/legacy/adapter/rest';

export default class ApplicationAdapter extends RESTAdapter {
  sortQueryParams(params) {
    let sortedKeys = Object.keys(params).sort().reverse();
    let len = sortedKeys.length, newParams = {};

    for (let i = 0; i < len; i++) {
      newParams[sortedKeys[i]] = params[sortedKeys[i]];
    }

    return newParams;
  }
}
```

#### Parameters

##### obj

[`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)<`string`, `unknown`>

#### Returns

[`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)<`string`, `unknown`>

***

### updateRecord()

```ts
updateRecord(
   store: Store$1, 
   schema: ModelSchema, 
   snapshot: Snapshot
): Promise<AdapterPayload>;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:838](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L838)

Called by the store when an existing record is saved
via the `save` method on a model record instance.

The `updateRecord` method serializes the record and makes an Ajax (HTTP PUT) request
to a URL computed by `buildURL`.

See `serialize` for information on how to customize the serialized form
of a record.

#### Parameters

##### store

`Store$1`

##### schema

`ModelSchema`

##### snapshot

`Snapshot`

#### Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)<[`AdapterPayload`](../../../compat/types/AdapterPayload.md)>

#### Overrides

```ts
AdapterWithBuildURLMixin.updateRecord
```

***

### urlForCreateRecord()

```ts
urlForCreateRecord(
   this: MixtBuildURLMixin, 
   modelName: string, 
   snapshot: Snapshot
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:231](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L231)

Builds a URL for a `record.save()` call when the record was created
locally using `store.createRecord()`.

#### Parameters

##### this

`MixtBuildURLMixin`

##### modelName

`string`

##### snapshot

`Snapshot`

#### Returns

`string`

***

### urlForDeleteRecord()

```ts
urlForDeleteRecord(
   this: MixtBuildURLMixin, 
   id: string, 
   modelName: string, 
   snapshot: Snapshot
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:245](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L245)

Builds a URL for a `record.save()` call when the record has been
deleted locally.

#### Parameters

##### this

`MixtBuildURLMixin`

##### id

`string`

##### modelName

`string`

##### snapshot

`Snapshot`

#### Returns

`string`

***

### urlForFindAll()

```ts
urlForFindAll(
   this: MixtBuildURLMixin, 
   modelName: string, 
   snapshots: SnapshotRecordArray
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:190](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L190)

Builds a URL for a `store.findAll(type)` call.

#### Parameters

##### this

`MixtBuildURLMixin`

##### modelName

`string`

##### snapshots

`SnapshotRecordArray`

#### Returns

`string`

***

### urlForFindBelongsTo()

```ts
urlForFindBelongsTo(
   this: MixtBuildURLMixin, 
   id: string, 
   modelName: string, 
   snapshot: Snapshot
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:224](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L224)

Builds a URL for fetching an async `belongsTo` relationship when a
URL is not provided by the server.

#### Parameters

##### this

`MixtBuildURLMixin`

##### id

`string`

##### modelName

`string`

##### snapshot

`Snapshot`

#### Returns

`string`

***

### urlForFindHasMany()

```ts
urlForFindHasMany(
   this: MixtBuildURLMixin, 
   id: string, 
   modelName: string, 
   snapshot: Snapshot
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:217](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L217)

Builds a URL for fetching an async `hasMany` relationship when a
URL is not provided by the server.

#### Parameters

##### this

`MixtBuildURLMixin`

##### id

`string`

##### modelName

`string`

##### snapshot

`Snapshot`

#### Returns

`string`

***

### urlForFindMany()

```ts
urlForFindMany(
   this: MixtBuildURLMixin, 
   ids: string[], 
   modelName: string, 
   snapshots: Snapshot<unknown>[]
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:210](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L210)

Builds a URL for coalescing multiple `store.findRecord(type, id)`
records into 1 request when the adapter's `coalesceFindRequests`
property is `true`.

#### Parameters

##### this

`MixtBuildURLMixin`

##### ids

`string`\[]

##### modelName

`string`

##### snapshots

`Snapshot`<`unknown`>\[]

#### Returns

`string`

***

### urlForFindRecord()

```ts
urlForFindRecord(
   this: MixtBuildURLMixin, 
   id: string, 
   modelName: string, 
   snapshot: Snapshot
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:184](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L184)

Builds a URL for a `store.findRecord(type, id)` call.

#### Parameters

##### this

`MixtBuildURLMixin`

##### id

`string`

##### modelName

`string`

##### snapshot

`Snapshot`

#### Returns

`string`

***

### urlForQuery()

```ts
urlForQuery(
   this: MixtBuildURLMixin, 
   query: Record<string, unknown>, 
   modelName: string
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:202](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L202)

Builds a URL for a `store.query(type, query)` call.

#### Parameters

##### this

`MixtBuildURLMixin`

##### query

[`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)<`string`, `unknown`>

##### modelName

`string`

#### Returns

`string`

***

### urlForQueryRecord()

```ts
urlForQueryRecord(
   this: MixtBuildURLMixin, 
   query: Record<string, unknown>, 
   modelName: string
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:196](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L196)

Builds a URL for a `store.queryRecord(type, query)` call.

#### Parameters

##### this

`MixtBuildURLMixin`

##### query

[`Record`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type)<`string`, `unknown`>

##### modelName

`string`

#### Returns

`string`

***

### urlForUpdateRecord()

```ts
urlForUpdateRecord(
   this: MixtBuildURLMixin, 
   id: string, 
   modelName: string, 
   snapshot: Snapshot
): string;
```

Defined in: [warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts:238](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/-private/build-url-mixin.ts#L238)

Builds a URL for a `record.save()` call when the record has been
updated locally.

#### Parameters

##### this

`MixtBuildURLMixin`

##### id

`string`

##### modelName

`string`

##### snapshot

`Snapshot`

#### Returns

`string`

## Properties

### \_defaultContentType

```ts
_defaultContentType: string = 'application/json; charset=utf-8';
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:396](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L396)

The `Content-Type` header used when serializing request bodies
that don't otherwise specify one.

***

### headers

```ts
headers: 
  | Record<string, unknown>
  | undefined;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:587](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L587)

Some APIs require HTTP headers, e.g. to provide an API
key. Arbitrary headers can be set as key/value pairs on the
`RESTAdapter`'s `headers` object and WarpDrive will send them
along with each ajax request..

```js [app/adapters/application.js]
import { RESTAdapter } from '@warp-drive/legacy/adapter/rest';

export default class ApplicationAdapter extends RESTAdapter {
  get headers() {
    return {
      'API_KEY': 'secret key',
      'ANOTHER_HEADER': 'Some header value'
    };
  }
}
```

***

### host

```ts
host: string | null;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:378](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L378)

See "Host customization" above.

***

### maxURLLength

```ts
maxURLLength: number = 2048;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:900](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L900)

The maximum URL length to allow when coalescing `findRecord` requests
into a single `findMany` request via [groupRecordsForFindMany](#grouprecordsforfindmany).
Requests that would exceed this length are split into multiple groups.

See http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers

***

### namespace

```ts
namespace: string | null;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:382](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L382)

See "Namespace customization" above.

***

### store

```ts
store: Store$1;
```

Defined in: [warp-drive-packages/legacy/src/adapter.ts:297](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter.ts#L297)

The Store service instance that owns this Adapter.

#### Inherited from

```ts
AdapterWithBuildURLMixin.store
```

***

### useFetch

```ts
useFetch: boolean = true;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:390](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L390)

This property allows ajax to still be used instead when `false`.

#### Default

```ts
true
@public
```

### coalesceFindRequests

#### Get Signature

```ts
get coalesceFindRequests(): boolean;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:521](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L521)

By default the RESTAdapter will send each find request coming from a `store.find`
or from accessing a relationship separately to the server. If your server supports passing
ids as a query string, you can set coalesceFindRequests to true to coalesce all find requests
within a single runloop.

For example, if you have an initial payload of:

```javascript
{
  post: {
    id: 1,
    comments: [1, 2]
  }
}
```

By default calling `post.comments` will trigger the following requests(assuming the
comments haven't been loaded before):

```
GET /comments/1
GET /comments/2
```

If you set coalesceFindRequests to `true` it will instead trigger the following request:

```
GET /comments?ids[]=1&ids[]=2
```

Setting coalesceFindRequests to `true` also works for `store.find` requests and `belongsTo`
relationships accessed within the same runloop. If you set `coalesceFindRequests: true`

```javascript
store.findRecord('comment', 1);
store.findRecord('comment', 2);
```

will also send a request to: `GET /comments?ids[]=1&ids[]=2`

Note: Requests coalescing rely on URL building strategy. So if you override `buildURL` in your app
`groupRecordsForFindMany` more likely should be overridden as well in order for coalescing to work.

##### Returns

`boolean`

#### Set Signature

```ts
set coalesceFindRequests(value: boolean): void;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:529](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L529)

By default the store will try to coalesce all `findRecord` calls within the same runloop
into as few requests as possible by calling groupRecordsForFindMany and passing it into a findMany call.
You can opt out of this behaviour by either not implementing the findMany hook or by setting
coalesceFindRequests to false.

##### Parameters

###### value

`boolean`

##### Returns

`void`

#### Overrides

```ts
AdapterWithBuildURLMixin.coalesceFindRequests
```

***

### fastboot

#### Get Signature

```ts
get fastboot(): FastBoot;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:403](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L403)

The FastBoot service instance, if running in a FastBoot environment.
Lazily looked up on first access.

##### Returns

`FastBoot`

#### Set Signature

```ts
set fastboot(value: FastBoot): void;
```

Defined in: [warp-drive-packages/legacy/src/adapter/rest.ts:416](https://github.com/warp-drive-data/warp-drive/blob/48dc0d277b98008082669dadc6a52e5c5682ef8e/warp-drive-packages/legacy/src/adapter/rest.ts#L416)

Sets the FastBoot service instance to use.

##### Parameters

###### value

`FastBoot`

##### Returns

`void`
