2008-09-30 5 views
3

웹 서비스 API가 있습니다. 일부 호출은 사용자가 제공 한 정보가있는 텍스트 필드를 포함하는 객체를 반환합니다. 설계 및 보안 관점에서 정보가 제공되지 않은 경우 해당 필드에서 null을 반환하는 단점은 무엇입니까? 빈 문자열 대신에 항상 빈 문자열을 리턴하는 명백한 이점이 있습니까? 아니면 클라이언트 코드가 널 (null)을 검사하지 않아도 됨으로써 API가 단순화되는 것입니까?웹 서비스 호출에서 null 값을 반환합니다.

답변

0

null을 반환하거나 빈 문자열을 반환하는 것과 관련된 보안 문제가 있다고 생각하지 않습니다.

정보가없는 입력란에 대해 null을 반환하는 것은 실제적인 단점이 없습니다. null이 나타내는 것의 종류입니다.

당신은

1

그것은 모두 당신이 빈 문자열에서와 같은 의미 다른 널 (null) 문자열 값을 치료 여부에 따라 달라집니다 (이 .NET입니다 가정)

string.IsNullOrEmpty() 

를 사용하여 클라이언트 코드를 단순화 할 수 있습니다.

null 및 빈 문자열은 모두 해당 필드에 대한 데이터가 없음을 의미합니다. 그런 다음 빈 문자열을 확인하고 반환하지 않아도 클라이언트가 더 간단 해지지 않을 이유는 없습니다.

0

null은 null을 의미합니다. 거기에 고유 한 보안 문제가 없습니다.

웹 서비스는 공용 API이므로 모든 입력 데이터를 엄격하게 검사하고 잘못 구성된 입력이 발생해야합니다. 클라이언트 코드가 올바른 일을한다고 가정 할 수 없으며 (악의적으로 또는 다른 방식으로) 널 (null)을 보내지 않습니다.

그래서 빈 문자열이나 다른 센티널 값은 사용자가 입력 내용을 확인하지 못하게하고, 반드시 더 쉽게 사용할 수있는 것은 아닙니다. 의미 상 빈 문자열은 null이 아니며 비어 있습니다.

가치가 무엇입니까, .net SoapFormatter에 의해 생성 된 xml은 보통 오래된 것이 아니며 빈 문자열과 다릅니다. 그것은 사소한 예이지만 유익합니다. 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 응답을 산출합니다. OtherStringNullNested이 응답에서 완전히 누락 된 점에 유의하십시오. 이는 BlankString과 다릅니다.

<MyClass> 
    <IsValid>false</IsValid> 
    <HelloString>Hello World</HelloString> 
    <BlankString /> 
    <Nested> 
    <Name>Bob</Name> 
    </Nested> 
</MyClass> 
1

짧은 답변 :는 웹 서비스에서 null을 사용하지 마십시오.

일반적으로 0 이상의 문자가없는 경우가 아니면 null 이상의 빈 문자열을 사용하는 것이 좋습니다. null을 "undefined"로만 사용하는 것을 선호합니다. 예를 들어 사용자가 입력 할 때 사용자가 필드를 입력하고 아무 것도 입력하지 않으면 빈 문자열이됩니다. 그러나 사용자가 필드를 건너 뛰면 null이 될 수 있습니다.

null에 대한 의미를 정의 할 때까지는 빈 문자열을 반환하고 String.IsNUllOrEmpty를 처리 측에서 사용하는 것이 유리합니다. 왜냐하면 미래의 지식 대신 ​​null 및 공백이 동일해야하기 때문입니다.

그러나 웹 서비스가 <element/>, <element></element>의 차이 사이의 도구에서 실수의 공평한 분배보다 더 있었고 요소가 단순히 실종되는 점이다 특별한 트위스트를 가지고있다. 내가 모든 것을 통제하지 않으면 상호 운용성이 받아 들여지지 않을 것이라고 혼란스럽게 생각합니다.

그래서 내가 표현할 필요가있는 null과 같은 개념이 있다면, 현재/현재 없음을 나타내는 별도의 부울 요소를 생성 할 것입니다.

1

개인적으로 빈 문자열 대신 null을 반환하는 것이 좋습니다. 데이터베이스에 null 값이있는 경우 해당 값을 반환하는 웹 서비스는 빈 문자열 대신 null을 반환하는 것이 이상적입니다.

그렇다면 어도비 플렉스와 같은 웹 서비스 클라이언트가 실제로 null을 사용할 수없는 문제가 발생했다. 클라이언트를 수정할 수없는 경우 빈 문자열을 전달해야 할 수도있다.

어느 경우에도 보안 문제가 발생하지 않습니다.

관련 문제