diff --git a/guides/using-json-rest-requests.md b/guides/using-json-rest-requests.md new file mode 100644 index 0000000000..36720dbe68 --- /dev/null +++ b/guides/using-json-rest-requests.md @@ -0,0 +1,52 @@ +- [Making Raw JSON REST Requests](#making-raw-json-rest-requests) + - [GET](#get) + - [PUT](#put) + - [POST](#post) + - [DELETE](#delete) + +# Making Raw JSON REST Requests +OpenSearch exposes a REST API that you can use to interact with OpenSearch. The OpenSearch .NET client provides a low-level API that allows you to send raw JSON requests to OpenSearch. This API is useful if you want to use a feature that is not yet supported by the OpenSearch .NET client, but it supported by the OpenSearch REST API. + +## GET +The following example returns the server version information via `GET /`. + +```csharp +var versionResponse = await client.LowLevel.DoRequestAsync(HttpMethod.GET, "/", new CancellationToken()); +Console.WriteLine(versionResponse.Body["version"]["number"].ToString()); // Version number +``` + +## POST +The following example creates a document via `POST /movies/_doc` with a request body that specifies the document to create. + +```csharp +var postResponse = await client.LowLevel.DoRequestAsync(HttpMethod.POST, "/movies/_doc", new CancellationToken(), PostData.Serializable( + new + { + title = "The Dark Knight 6", + director = "Christopher Nolan", + year = 2012 + })); +Console.WriteLine(postResponse.Body["result"].ToString()); // created +``` + +# PUT +The following example creates a document via `PUT /movies/_doc/{id}` with a request body that specifies the document to create. + +```csharp +var putResponse = await client.LowLevel.DoRequestAsync(HttpMethod.PUT, "/movies/_doc/1", new CancellationToken(), PostData.Serializable( + new + { + title = "The Dark Knight 6", + director = "Christopher Nolan", + year = 2023 + })); +Console.WriteLine(putResponse.Body["result"].ToString()); // created +``` + +# DELETE +The following example deletes a document via `DELETE /movies/_doc/{id}`. + +```csharp +var deleteResponse = await client.LowLevel.DoRequestAsync(HttpMethod.DELETE, "/movies/_doc/1", new CancellationToken()); +Console.WriteLine(deleteResponse.Body["result"].ToString()); // deleted +``` \ No newline at end of file diff --git a/samples/UsingJsonRestRequestsSample.cs b/samples/UsingJsonRestRequestsSample.cs new file mode 100644 index 0000000000..ef7d7148b8 --- /dev/null +++ b/samples/UsingJsonRestRequestsSample.cs @@ -0,0 +1,46 @@ +using OpenSearch.Client; +using OpenSearch.Net; +using HttpMethod = OpenSearch.Net.HttpMethod; + + +class Program +{ + static async Task Main(string[] args) + { + var node = new Uri("https://localhost:9200"); + var config = new ConnectionSettings(node) + .ServerCertificateValidationCallback(CertificateValidations.AllowAll) + .BasicAuthentication("admin", "admin") + .DisableDirectStreaming(); + + var client = new OpenSearchClient(config); + + // GET + var versionResponse = await client.LowLevel.DoRequestAsync(HttpMethod.GET, "/", new CancellationToken()); + Console.WriteLine(versionResponse.Body["version"]["number"].ToString()); // Version number + + // Post + var postResponse = await client.LowLevel.DoRequestAsync(HttpMethod.POST, "/movies/_doc", new CancellationToken(), PostData.Serializable( + new + { + title = "The Dark Knight", + director = "Christopher Nolan", + year = 2012 + })); + Console.WriteLine(postResponse.Body["result"].ToString()); // created + + // PUT + var putResponse = await client.LowLevel.DoRequestAsync(HttpMethod.PUT, "/movies/_doc/1", new CancellationToken(), PostData.Serializable( + new + { + title = "The Dark Knight 2", + director = "Christopher Nolan", + year = 2012 + })); + Console.WriteLine(putResponse.Body["result"].ToString()); // created + + // DELETE + var deleteResponse = await client.LowLevel.DoRequestAsync(HttpMethod.DELETE, "/movies/_doc/1", new CancellationToken()); + Console.WriteLine(deleteResponse.Body["result"].ToString()); // deleted + } +} \ No newline at end of file