2016-10-02 2 views
0

것은 내가 표현하고 개조 1.9을 사용하여 안드로이드 네이티브 앱 사용 Node.js를 서버에서 일하고 있어요. true/false 답변 만 클라이언트에 반환하는 로그인 API의 경우 JSON을 계속 사용해야합니까?서버가 항상 http 응답으로 JSON 객체를 보내야합니까?

if(isLegal) { 
    res.sendStatus(200); 
    dbConnector.updateUser(token); 
} 
else{ 
    console.log('Token is not legal'); 
    res.sendStatus(403); 
} 

그러나 개조 프레임 워크는 제가와 JSON 객체를 전송해야 생각하게 JSON에 대한 응답을 변환하려고 : 제가보기에는

는 서버는 상태 코드 응답을 보낼 수있다 대답은 이상하지만.

내 개조 위해 RESTClient :

public class RestClient { 
private static final String URL = SessionDetails.getInstance().serverAddress; 

private retrofit.RestAdapter restAdapter; 
private ServerAPI serverAPI; 

public RestClient() { 

    restAdapter = new retrofit.RestAdapter.Builder() 
      .setEndpoint(URL) 
      .setLogLevel(retrofit.RestAdapter.LogLevel.FULL) 
      .build(); 

    serverAPI = restAdapter.create(ServerAPI.class); 
} 

public ServerAPI getService() { 
    return serverAPI; 
} 

}

그리고 사용 :

  restClient.getService().login(token.getToken(), token.getUserId(), new Callback<Void>() { 
      @Override 
      public void success(Void aVoid, Response response) { 
       Log.d("Chooser", "Successful login on server."); 
      } 

      @Override 
      public void failure(RetrofitError error) { 
       error.printStackTrace(); 
       Log.d("Chooser", "Login failed on server."); 
      } 
     }); 

는 다음과 같은 오류와 함께 결과를 그대로 사용 :

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING

이 있습니다 많은 주제 그러나이 문제에 대해서는 올바른 (또는 더 나은) 사용 방법에 대한 확실한 답이 없습니다.

이러한 경우 가장 좋은 구현에 대한 어떤 아이디어? 당신의 HTTP 응답에 빈 몸을 보내기

+1

개조는 JSON 라이브러리로 GSON을 사용하며 서버로부터 수신 된 모든 개체를 구문 분석을 시도합니다. – nurgasemetey

+0

그건 확실합니다. 하지만 JSON이 아닌 응답의 경우에는 예외가 발생합니다. –

+0

이 시나리오에 대해 간단한 클래스를 만들 수 있습니다. 어쩌면 앞으로이 로그인 프로세스가 확장 될 것입니다. Bobcat100 @ – nurgasemetey

답변

1

은 완벽하게 합법적이고 유용 할 수 있습니다 때로는 일부 클라이언트는 응답 상태에 대한에만 신경 수 있지만 일부 클라이언트는 응답이 때문에 몸이 아픈 적이 전송을 기대할 수 있으며.

// Express 4.x: 
res.status(403).json({error: 'Token is not legal'}); 

// Express 3.x: 
res.json(403, {error: 'Token is not legal'}); 

이러한 오류 메시지가 클라이언트 개발을위한 매우 유용 할 수 있습니다 :

당신은 HTTP 응답 상태 외에 JSON 응답을 포함 할 수 있습니다. 불법 토큰, 유효 기간이 만료 된 토큰, 만료되지 않은 합법적 인 토큰 등 여러 가지 이유로 여러 가지 이유로 403을 얻을 수 있지만 HTTP 응답 코드 외에도 특정 오류 메시지를 추가하면 클라이언트에게 정확하게 어떤 것을 알릴 수 있습니다 잘못되어 클라이언트 쪽 코드가 사용자에게 더 나은 오류 메시지를 표시 할 수 있습니다.

또한, truefalse도 유효 JSON 참고.

관련 문제