2008-09-30 2 views
3

У меня есть API веб-службы. Некоторые вызовы возвращают объекты, содержащие текстовые поля, с информацией, предоставленной пользователем. Как с точки зрения дизайна, так и с точки зрения безопасности, каковы недостатки, возвращающие нуль в этих полях, когда информация не была предоставлена? Есть ли явное преимущество всегда возвращать пустую строку вместо этого, а затем упростить API, не требуя, чтобы клиентский код проверял наличие нулей?возврат нулевых значений из вызова веб-службы

ответ

0

Я не думаю, что есть проблема с безопасностью, связанная с возвратом null или возвратом пустой строки.

Нет никакого реального недостатка в возврате null для тех полей, для которых нет информации - это то, что означают нули.

Вы можете упростить код клиента с помощью

string.IsNullOrEmpty() 

(при условии, что это .NET)

1

Все зависит от лечения ли нулевое значение строки семантически отличается от пустой строки.

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

0

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> 
1

Короткий ответ: Не используйте нуль в веб-сервисах.

В общем, я советую придерживаться пустых строк над нулем, если только значение не равно нулю. Я бы предпочел использовать null только как «неопределенный». Например, при вводе пользователя, если пользователь входит в поле и ничего не вводит, это будет пустая строка. Но если пользователь просто пропускает это поле, это может быть null.

До тех пор, пока я не определю значение для null, я предпочитаю возвращать пустую строку и использовать на стороне обработки String.IsNUllOrEmpty, потому что вместо любых будущих знаний я должен считать, что пустые и пустые одинаковые.

Но веб-сервисы имеют особый поворот, который является то, что там было больше, чем справедливая доля ошибок в инструментах между различиями в <element/>, <element></element> и элемент просто неведение. Достаточно путаницы в том, что, если я не контролирую все это, я не доверяю совместимости, чтобы быть приемлемой.

Так что, если у меня есть понятие, как null, которое мне нужно представлять, я создам отдельный логический элемент для обозначения текущего/отсутствующего.

1

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

Сказав это, я столкнулся с проблемами, когда клиенты веб-сервисов, такие как Adobe Flex, не могут работать с нулями, и вам может потребоваться передать пустую строку, если клиент не может быть изменен.

Я не вижу никаких проблем с безопасностью в любом случае.

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