В REST OPTIONS — это аннотация уровня метода. Эта аннотация указывает, что следующий метод будет отвечать только на HTTP-запрос OPTIONS. Он используется для запроса информации о возможности связи, доступной для ресурса.

Этот метод позволяет клиенту REST API определить, какой HTTP-метод (GET, HEAD, POST, PUT, DELETE) можно использовать для ресурса, идентифицируемого запрошенным URI, без инициирования запрос ресурсов с использованием любого конкретного метода HTTP. Ответ на этот метод не кэшируется.

Ответ 200 OK должен включать любые поля заголовка, такие как Разрешить, которые определяют вариант связи, реализованный сервером, и применимы к ресурсу, указанному запрошенным URI. Тело ответа (если есть) также должно включать информацию о возможности связи, доступной для ресурса. Формат такого тела не определен спецификацией, но может быть определен будущими расширениями HTTP. Если тело ответа не включено, значение поля заголовка Content-Length должно быть равно 0.

Пример: –
200 OK
Разрешить: HEAD,GET,PUT,DELETE,OPTIONS

Если URI запроса представляет собой знак звездочки ( * ), то запрос метода OPTIONS применяется к серверу, а не к конкретному ресурсу. Его можно использовать как ping для проверки его возможностей.

Метод REST OPTIONS также используетсядля запроса CORS (совместное использование ресурсов между источниками). Подробнее о CORS можно прочитать здесь.

Попробуем понять это на примере.

Пример :-

В этом примере REST OPTIONS мы нажмем этот URL-адрес ‹base URL›/books, чтобы получить список HTTP-методов, разрешенных для книжного ресурса.

import javax.ws.rs.OPTIONS;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path("books")
public class OptionsMethodExample {
  @OPTIONS
  @Produces(MediaType.APPLICATION_JSON)
  @Path("/")
  public Response optionsForBookResource() {
    return Response.status(200)
          .header("Allow","POST, PUT, GET")
          .header("Content-Type", MediaType.APPLICATION_JSON)
          .header("Content-Length", "0")
          .build();
  } 
}

Результат :-

Если вам понравилось, пожалуйста, поделитесь своими мыслями в разделе комментариев и поделитесь им с другими.

Первоначально опубликовано на codedestine.com 27 июля 2017 г.