У меня есть API веб-службы. Некоторые вызовы возвращают объекты, содержащие текстовые поля, с информацией, предоставленной пользователем. Как с точки зрения дизайна, так и с точки зрения безопасности, каковы недостатки, возвращающие нуль в этих полях, когда информация не была предоставлена? Есть ли явное преимущество всегда возвращать пустую строку вместо этого, а затем упростить API, не требуя, чтобы клиентский код проверял наличие нулей?возврат нулевых значений из вызова веб-службы
ответ
Я не думаю, что есть проблема с безопасностью, связанная с возвратом null или возвратом пустой строки.
Нет никакого реального недостатка в возврате null для тех полей, для которых нет информации - это то, что означают нули.
Вы можете упростить код клиента с помощью
string.IsNullOrEmpty()
(при условии, что это .NET)
Все зависит от лечения ли нулевое значение строки семантически отличается от пустой строки.
Если нулевая и пустая строка означают, что для этого поля нет данных, то я не вижу причин не делать жизнь проще для клиента, не имея необходимости проверять и возвращать пустую строку.
Null только означает null. Там нет неотъемлемой проблемы безопасности.
Как веб-сервис является общедоступным API, вы должны тщательно проверять все входные данные и ожидать появления плохо сформированного ввода. Вы никогда не можете предположить, что клиентский код делает правильную вещь и не посылает вам null (злонамеренно или иначе).
Таким образом, пустые строки или другие значения дозорных сигналов не избавляют вас от проверки ввода, и они не всегда облегчают жизнь. Семантически пустые строки также не равны нулю, они пусты.
Для чего это стоит, xml, сгенерированный .net SoapFormatter для null, является простым старым, и это не то же самое, что пустая строка. Это тривиальный пример, но информативный. Если вы отправляете null, вы также отправляете меньше данных, что может быть что-то для рассмотрения.
{
[WebMethod]
public MyClass HelloWorld()
{
MyClass val = new MyClass()
{
IsValid = false,
HelloString = "Hello World",
BlankString = "",
Nested = new NestedClass { Name = "Bob" }
};
return val;
}
}
public class MyClass
{
public bool IsValid { get; set; }
public string HelloString { get; set; }
public string BlankString { get; set; }
public string OtherString { get; set; }
public NestedClass Nested { get; set; }
public NestedClass NullNested { get; set; }
}
public class NestedClass
{
public string Name { get; set; }
}
дает следующий ответ xml. Обратите внимание, что OtherString
и NullNested
полностью отсутствуют из ответа, который отличается от BlankString
.
<MyClass>
<IsValid>false</IsValid>
<HelloString>Hello World</HelloString>
<BlankString />
<Nested>
<Name>Bob</Name>
</Nested>
</MyClass>
Короткий ответ: Не используйте нуль в веб-сервисах.
В общем, я советую придерживаться пустых строк над нулем, если только значение не равно нулю. Я бы предпочел использовать null только как «неопределенный». Например, при вводе пользователя, если пользователь входит в поле и ничего не вводит, это будет пустая строка. Но если пользователь просто пропускает это поле, это может быть null.
До тех пор, пока я не определю значение для null, я предпочитаю возвращать пустую строку и использовать на стороне обработки String.IsNUllOrEmpty, потому что вместо любых будущих знаний я должен считать, что пустые и пустые одинаковые.
Но веб-сервисы имеют особый поворот, который является то, что там было больше, чем справедливая доля ошибок в инструментах между различиями в
, <element/>
и элемент просто неведение. Достаточно путаницы в том, что, если я не контролирую все это, я не доверяю совместимости, чтобы быть приемлемой.<element></element>
Так что, если у меня есть понятие, как null, которое мне нужно представлять, я создам отдельный логический элемент для обозначения текущего/отсутствующего.
Я лично предпочитаю возвращать нули вместо пустых строк. Если база данных имеет нулевое значение, веб-служба, возвращающая это значение, должна в идеале возвращать значение null вместо пустой строки.
Сказав это, я столкнулся с проблемами, когда клиенты веб-сервисов, такие как Adobe Flex, не могут работать с нулями, и вам может потребоваться передать пустую строку, если клиент не может быть изменен.
Я не вижу никаких проблем с безопасностью в любом случае.
- 1. Возврат нулевых значений, а не нулевые
- 2. Возврат нулевых значений в скрипте Google Apps
- 3. Возврат нулевых значений в файле DAO
- 4. Возврат нулевых значений в запросе mysqli
- 5. Возврат нулевых строк из запроса
- 6. метод фильтр нулевых значений
- 7. Обработка нулевых значений из ResultSet
- 8. Удаление нулевых значений из массива
- 9. Чтение нулевых значений из ResultSet
- 10. Удаление нулевых значений из запроса
- 11. Получение нулевых значений из флажков
- 12. Чтение нулевых значений из Excel
- 13. Json Post метода возврат нулевых значений в C#
- 14. Возврат нулевых значений для доступа к базе данных через OleDb
- 15. SQL Server + возврат нулевых данных
- 16. Возврат нескольких значений из класса вызова Rhino to Java
- 17. обработки нулевых значений DateTime
- 18. Проверка получения нулевых значений
- 19. Проверка нулевых значений конверсий
- 20. SSRS подсчет нулевых значений
- 21. C# Обработка нулевых значений
- 22. Ранг последовательных нулевых значений
- 23. Строка сортировки нулевых значений
- 24. Как избежать нулевых значений
- 25. нулевых значений в SQL
- 26. Кэширование нулевых значений
- 27. группа, не-нулевых значений
- 28. Удаление нулевых значений из массива объектов
- 29. Получение нулевых значений из микширования python
- 30. Сериализация нулевых значений из ответа REST API