2015-10-24 9 views
0

Мое понимание REST заключается в том, что все, что не изменяет состояние базовой системы (например, запрос), должно быть GET-запросом. Это также означает, что параметры запроса должны быть помещены в URI, как так:подпишитесь на запрос в webapi

api/SomeMethod/Parameter1/{P1:double}/Parameter2/{P1:double} 

или как строки запроса, как описано здесь:

REST API Best practice: How to accept list of parameter values as input

Иногда запрос может потребоваться длительный вектор (номер точек х/у). Как мне решить проблему длины URI здесь? Должен ли я просто использовать POST? Благодарю.

+0

Вы беспокоитесь о предел числа попыток? – lbrahim

+0

да, я. Насколько я знаю, предел составляет около 2000 символов. – cs0815

+0

Согласно [this] (http://stackoverflow.com/a/812962/1565402) он должен быть больше, чем для IIS, а также настраиваться. Вы также можете попробовать и настроить его в соответствии с вашими потребностями: http://forums.asp.net/t/1973616.aspx?Bad+Request+Querystring+Length+exceeds – lbrahim

ответ

1

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

Например, создать коллекцию на:

api/Vector 

Тогда ваши клиенты API могут POST свои большие векторы, а затем в другом запросе обращаться к нему по одному номеру идентификатора.

Это значительно уменьшает размер длины запроса, сохраняется REST и позволяет легко переносить эти векторы. Если вы беспокоитесь о хранении, срок действия вектора истекает через 30 минут или дольше.

Другой вариант - спуститься по дороге JSON-LD, которая аналогична, за исключением того, что вы не переносите векторы. Вы просто предоставляете объект @context, а клиенты API будут размещать вектор на своем собственном сервере и ссылаться на его API по URL-адресу в параметре запроса.

+0

имеет смысл, но не в моем сценарии, где я хочу сравнить большие «векторы». например, большой вектор, есть ли хотя бы один, который на 90% похож ... – cs0815

+0

Так почему бы не иметь конечную точку, которая принимает вектор 3, вектор 4 и возвращает 80% или что-то еще? – Calebmer

+0

, когда вы говорите «возьмите», вы имеете в виду POST? требование состоит в том, что один вектор не сохраняется. – cs0815

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