2021-07-12 16:53:44 +03:00
|
|
|
---
|
|
|
|
layout: developer-doc
|
|
|
|
title: Language Server HTTP Endpoints
|
|
|
|
category: language-server
|
|
|
|
tags: [language-server, protocol, specification]
|
|
|
|
order: 6
|
|
|
|
---
|
|
|
|
|
|
|
|
# HTTP Endpoints
|
|
|
|
|
|
|
|
Language server exposes a number of HTTP endpoints on the same socket as the
|
|
|
|
JSONRPC protocol.
|
|
|
|
|
|
|
|
<!-- MarkdownTOC levels="2" autolink="true" indent=" " -->
|
|
|
|
|
2021-08-11 16:39:39 +03:00
|
|
|
- [`/_health`](#_health)
|
|
|
|
- [`/_health/readiness`](#_healthreadiness)
|
|
|
|
- [`/_health/liveness`](#_healthliveness)
|
|
|
|
- [`/_idle`](#_idle)
|
|
|
|
- [`/_idle/reset`](#_idlereset)
|
2021-07-12 16:53:44 +03:00
|
|
|
|
|
|
|
<!-- /MarkdownTOC -->
|
|
|
|
|
|
|
|
## `/_health`
|
|
|
|
|
|
|
|
HTTP endpoint that provides basic health checking capabilities.
|
|
|
|
|
|
|
|
### `GET | HEAD`
|
|
|
|
|
|
|
|
Returns `200 OK` when the server is started and `500 Internal Server Error`
|
|
|
|
otherwise.
|
|
|
|
|
|
|
|
#### Request
|
|
|
|
|
|
|
|
```text
|
|
|
|
> GET /_health HTTP/1.1
|
|
|
|
> Host: localhost:63597
|
|
|
|
> User-Agent: curl/7.77.0
|
|
|
|
> Accept: */*
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Response
|
|
|
|
|
|
|
|
```text
|
|
|
|
< HTTP/1.1 200 OK
|
|
|
|
< Server: akka-http/10.2.0-RC1
|
|
|
|
< Date: Fri, 09 Jul 2021 15:16:16 GMT
|
|
|
|
< Content-Type: text/plain; charset=UTF-8
|
|
|
|
< Content-Length: 2
|
|
|
|
<
|
|
|
|
OK
|
|
|
|
```
|
|
|
|
|
|
|
|
## `/_health/readiness`
|
|
|
|
|
|
|
|
The server readiness probe.
|
|
|
|
|
|
|
|
### `GET | HEAD`
|
|
|
|
|
|
|
|
Returns `200 OK` when the server is initialized and `500 Internal Server Error`
|
|
|
|
otherwise.
|
|
|
|
|
|
|
|
#### Request
|
|
|
|
|
|
|
|
```text
|
|
|
|
> GET /_health/readiness HTTP/1.1
|
|
|
|
> Host: localhost:63597
|
|
|
|
> User-Agent: curl/7.77.0
|
|
|
|
> Accept: */*
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Response
|
|
|
|
|
|
|
|
```text
|
|
|
|
< HTTP/1.1 200 OK
|
|
|
|
< Server: akka-http/10.2.0-RC1
|
|
|
|
< Date: Fri, 09 Jul 2021 15:30:53 GMT
|
|
|
|
< Content-Type: text/plain; charset=UTF-8
|
|
|
|
< Content-Length: 2
|
|
|
|
<
|
|
|
|
OK
|
|
|
|
```
|
|
|
|
|
|
|
|
## `/_health/liveness`
|
|
|
|
|
|
|
|
The server liveness probe.
|
|
|
|
|
|
|
|
### `GET | HEAD`
|
|
|
|
|
|
|
|
Checks if all the server subsystems are functioning and returns `200 OK` or
|
|
|
|
`500 Internal Server Error` otherwise.
|
|
|
|
|
|
|
|
#### Request
|
|
|
|
|
|
|
|
```text
|
|
|
|
> GET /_health/liveness HTTP/1.1
|
|
|
|
> Host: localhost:60339
|
|
|
|
> User-Agent: curl/7.77.0
|
|
|
|
> Accept: */*
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Response
|
|
|
|
|
|
|
|
```text
|
|
|
|
< HTTP/1.1 200 OK
|
|
|
|
< Server: akka-http/10.2.0-RC1
|
|
|
|
< Date: Fri, 09 Jul 2021 15:35:43 GMT
|
|
|
|
< Content-Type: text/plain; charset=UTF-8
|
|
|
|
< Content-Length: 2
|
|
|
|
<
|
|
|
|
OK
|
|
|
|
```
|
|
|
|
|
|
|
|
## `/_idle`
|
|
|
|
|
|
|
|
The server idleness probe.
|
|
|
|
|
|
|
|
### `GET`
|
|
|
|
|
|
|
|
Return the amount of time the language server is idle.
|
|
|
|
|
|
|
|
#### Request
|
|
|
|
|
|
|
|
```text
|
|
|
|
> GET /_idle HTTP/1.1
|
|
|
|
> Host: localhost:60339
|
|
|
|
> User-Agent: curl/7.77.0
|
|
|
|
> Accept: */*
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Response
|
|
|
|
|
|
|
|
```text
|
|
|
|
< HTTP/1.1 200 OK
|
|
|
|
< Server: akka-http/10.2.0-RC1
|
|
|
|
< Date: Fri, 09 Jul 2021 15:44:51 GMT
|
|
|
|
< Content-Type: application/json
|
|
|
|
< Content-Length: 21
|
|
|
|
<
|
|
|
|
{"idle_time_sec":58}
|
|
|
|
```
|
2021-08-11 16:39:39 +03:00
|
|
|
|
|
|
|
## `/_idle/reset`
|
|
|
|
|
|
|
|
The reset request of the server idleness probe.
|
|
|
|
|
|
|
|
### `POST`
|
|
|
|
|
|
|
|
Reset the idle time of the language server.
|
|
|
|
|
|
|
|
#### Request
|
|
|
|
|
|
|
|
```text
|
|
|
|
> POST /_idle/reset HTTP/1.1
|
|
|
|
> Host: localhost:64996
|
|
|
|
> User-Agent: curl/7.77.0
|
|
|
|
> Accept: */*
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Response
|
|
|
|
|
|
|
|
```text
|
|
|
|
< HTTP/1.1 200 OK
|
|
|
|
< Server: akka-http/10.2.0-RC1
|
|
|
|
< Date: Mon, 09 Aug 2021 15:37:27 GMT
|
|
|
|
< Content-Type: text/plain; charset=UTF-8
|
|
|
|
< Content-Length: 2
|
|
|
|
<
|
|
|
|
OK
|
|
|
|
```
|
2023-10-12 01:03:34 +03:00
|
|
|
|
|
|
|
# HTTPS endpoints
|
|
|
|
|
|
|
|
Language server can expose HTTPS endpoints when configured appropriately:
|
|
|
|
|
|
|
|
1. Project-manager must be told that project's language server should be started
|
|
|
|
with https/wss support
|
|
|
|
- `NETWORK_ENABLE_HTTPS=true`
|
|
|
|
2. User should provide appropriate secure configuration. Currently supported are
|
|
|
|
PKCS12 bundle with password and certificate with private key. Depending on
|
|
|
|
the configuration present, either choice will be sufficient.
|
|
|
|
|
|
|
|
If a project-manager is started with `ENSO_HTTPS_PUBLIC_CERTIFICATE` and
|
|
|
|
`ENSO_HTTPS_PRIVATE_KEY` env variables, SSL context will be created from a
|
|
|
|
certificate and a private key, respectively. If a project-manager is started
|
|
|
|
with `ENSO_HTTPS_PKCS12_PATH` and `ENSO_HTTPS_PKCS12_PASSWORD` env variables,
|
|
|
|
SSL context will be created from a file in PKCS12 format and a password to it,
|
|
|
|
respectively.
|