2014-12-18 2 views
-1

У меня есть функция поиска в моем продукте, где пользователь может вводить все, что захочет. Эта строка может быть многострочной.Rest Api, чтобы принять вход Blob

После ввода многострочной последовательности данных (строки) пользователь нажимает кнопку «поиск». Это пошлет «blob» на мой Api.

Теперь я считаю, что это будет запрос POST. (Пожалуйста, поправьте меня, если я ошибаюсь здесь) Но я не уверен, какая будет лучшая структура данных для получения ввода.

(Я использую dropwizard).

Как я могу отправить вход в свой api? Так должно быть мой вклад:

  1. Строка
  2. Массив строк (где каждая строка является одним из элементов массива)
  3. ?

В настоящее время я отправляю данные Blob как часть моей полезной нагрузки запроса POST.

+1

Почему вы Лоо король, чтобы изменить то, как вы сейчас это делаете? Отправка критериев поиска в виде строки имеет смысл. Протокол связи должен должным образом справляться с тем, что нужно экранировать. – xpa1492

ответ

1

«БЛОБ» - это не то, что у вас есть. Блаб - это Binary Large Object, а содержимое textarea определенно не является двоичным, но простым текстом.

Java, JAX-RS REST API может получить тело HTTP POST:

@POST 
public Respone postSearch(@RequestBody String searchFieldContent) { 
    // do search 
    // return Response 
} 

Я советую не использовать POST для поиска (который был бы RPC), но GET. Построить параметр запроса, как

GET /api/things?search=what the user entered into the textarea 

, который может быть сопоставлен с

@GET 
public Response searchThings(@RequestParam("search") String searchParam) { 
    // do search 
    // return Response 
} 

Edit

Использование POST для поиска не RESTful. Если вы не можете использовать GET, лучшим подходом было бы моделирование поиска как отдельного ресурса с состоянием.

Клиент:

POST /api/searches 

the long text the user entered in the textarea 

Сервер:

201 Created 
Location: /api/searches/id-of-search-created-by-server 

Client

GET /api/searches/id-of-search-created-by-server 

Сервер:

200 OK 
Content-Type: application/json 

{ 
    "query": "the long text the user entered in the textarea", 
    "state", "finished", 
    "result": { 
    "length": 23, 
    "documents: [ 
     { 
     "id": "id of first search hit", 
     "title": "some title" 
     }, 
     ... 
    ] 
    } 
} 
+0

Единственная причина, по которой я использую сообщение, - это возможность ввода пользователем длинной строки. – Roger

+0

Сколько времени "длинный"? –

+0

Я не хочу указывать ограничение. Таким образом, вы можете думать о строке, имеющей 10000 символов. – Roger

Смежные вопросы