Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion source/connect.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,5 @@ Connect to MongoDB
:titlesonly:
:maxdepth: 1

/connect/mongoclient
/connect/mongoclient
/connect/stable-api
114 changes: 114 additions & 0 deletions source/connect/stable-api.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
.. _ruby-stable-api:

===========
Stable API
===========

.. contents:: On this page
:local:
:backlinks: none
:depth: 2
:class: singlecol

.. facet::
:name: genre
:values: reference

.. meta::
:keywords: compatible, backwards, upgrade

.. note::

The Stable API feature requires {+mdb-server+} 5.0 or later.

Overview
--------

In this guide, you can learn how to specify **{+stable-api+}** compatibility when
connecting to a MongoDB deployment.

The {+stable-api+} feature forces the server to run operations with behaviors compatible
with the API version you specify. Using the {+stable-api+} ensures consistent responses
from the server and provides long-term API stability for your application.

The following sections describe how you can enable and customize {+stable-api+} for
your MongoDB client. For more information about the {+stable-api+}, including a list of
the commands it supports, see :manual:`Stable API </reference/stable-api/>` in the
{+mdb-server+} manual.

Enable the {+stable-api+}
-------------------------

To enable the {+stable-api+}, pass a hash that specifies the {+stable-api+} version to the optional
``server_api`` parameter when you create a ``Mongo::Client`` instance.

The following code example shows how to specify {+stable-api+} version 1:

.. code-block:: ruby

client = Mongo::Client.new(uri, server_api: { version: '1' })

Once you create a ``Client`` instance with
a specified API version, all commands that you run with the client use the specified
version. If you must run commands using more than one version of the
{+stable-api+}, create a new ``Client``.

Configure the {+stable-api+}
----------------------------

The following table describes {+stable-api+} options that you can set by specifying
them in the ``server_api`` hash. You can use these options to customize the behavior of the
{+stable-api+}.

.. list-table::
:header-rows: 1
:stub-columns: 1
:widths: 25,75

* - Option Name
- Description

* - strict
- | **Optional**. When ``true``, if you call a command that isn't part of
the declared API version, the driver raises an exception.
|
| Default: **false**

* - deprecation_errors
- | **Optional**. When ``true``, if you call a command that is deprecated in the
declared API version, the driver raises an exception.
|
| Default: **false**

The following code example shows how you can set the two options on a ``ServerApi`` instance:

.. code-block:: ruby

client = Mongo::Client.new(uri,
server_api: { version: '1', strict: true, deprecation_errors: true })

Troubleshooting
---------------

Unrecognized field 'apiVersion' on server
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The {+driver-short+} raises this exception if you specify an API version and connect to a
MongoDB server that doesn't support the {+stable-api+}. Ensure you're connecting to a
deployment running {+mdb-server+} v5.0 or later.

Provided apiStrict:true, but the command count is not in API Version
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The {+driver-short+} raises this exception if your ``Client`` runs an operation that
isn't in the {+stable-api+} version you specified. To avoid this error, use an alternative
operation supported by the specified {+stable-api+} version, or set the ``strict``
option to ``false`` when constructing your ``ServerApi`` object.

API Documentation
-----------------

For more information about using the {+stable-api+} with the {+driver-short+}, see the
following API documentation:

- `Mongo::Client <{+api-root+}/Mongo/Client.html>`__
Loading