Árvore de páginas

Classe responsável por criar um builder da classe JsonAPIResponse para retornar na API Progress. Com esta classe é possível a criação facilitada da response através dos seguintes métodos:

  • ok (JsonObject com e sem status);
  • ok (JsonArray com indicador de existência de próximo registro);
  • asError (Interface Progress.Lang.Error com e sem status);
  • asError (Tabela temporária RowErrors);
  • asError (JsonArray com status);
  • asWarning (JsonObject com a tabela temporária RowErrors);
  • asWarning (JsonObject com o status e a tabela temporária RowErrors);
  • asWarning (JsonArray com indicador de existência de próximo registro e a tabela temporária RowErrors);
  • empty(com e sem status).

Métodos

Nome

Descrição

okCria um retorno positivo com o payload e com o código do status HTTP 200 (é possível informar um status).
asError

Cria um retorno de erro com uma lista erros da RowErrors e com o código do status HTTP 500 (é possível informar um status).

asWarning

Cria um retorno positivo com uma lista warnings da RowErrors e com o código do status HTTP 200 (é possível informar um status).

emptyCria um retorno vazio e com o código do status HTTP 200 (é possível informar um status).

Exemplos

JsonAPIResponseBuilder:ok()
...

DEFINE OUTPUT PARAM jsonOutput AS JsonObject NO-UNDO.

DEFINE VARIABLE oJsonObject    AS JsonObject NO-UNDO.

ASSIGN oJsonObject = NEW JSONObject().
jsonOutput = JsonAPIResponseBuilder:ok(oJsonObject).

/* ou */
jsonOutput = JsonAPIResponseBuilder:ok(oJsonObject, 201). /* retorna status 201 */

/* ou */
jsonOutput = JsonAPIResponseBuilder:ok(oJsonObject, TRUE). /* existencia de próximo registro */

...

/*
No exemplo acima será retornado um Json na variável "jsonOutput" no seguinte formato, podendo ter o status alterado:
{
	"status":200,
	"payload":{conteudo_do_oJsonObject}
}
*/
JsonAPIResponseBuilder:asError() - Interface Error
...

DEFINE OUTPUT PARAM jsonOutput AS JsonObject NO-UNDO.

DEFINE VARIABLE oAppError AS Progress.Lang.AppError NO-UNDO.
    
ASSIGN oAppError = NEW Progress.Lang.AppError().
oAppError:AddMessage("Descrição do Erro", 1).
    
jsonOutput = JsonAPIResponseBuilder:asError(oAppError).

/* ou */
jsonOutput = JsonAPIResponseBuilder:asError(oAppError, 401). /* retorna status 401 */

...
/*
No exemplo acima será retornado um Json na variável "jsonOutput" no seguinte formato, podendo ter o status alterado:
{
	"status":500,
	"payload":{
		"code":1,
		"message":"Descrição do Erro",
		"type":"error",
		"detailedMessage":"Progress.Lang.AppError"
	}
}
*/
JsonAPIResponseBuilder:asError() - Tabela temporária RowErrors
...

{method/dbotterr.i}

DEFINE OUTPUT PARAM jsonOutput AS JsonObject NO-UNDO.

CREATE RowErrors.
ASSIGN RowErrors.ErrorNumber      = 1
       RowErrors.ErrorDescription = "Descrição do Erro"
       RowErrors.ErrorSubType     = "ERROR".
 
jsonOutput = JsonAPIResponseBuilder:asError(TEMP-TABLE RowErrors:HANDLE).

...
/*
No exemplo acima será retornado um Json na variável "jsonOutput" no seguinte formato:
{
	"status":500,
	"payload":{
		"code":"1",
		"message":"Descrição do Erro",
		"type":"error",
		"detailedMessage":""
	}
}
*/
JsonAPIResponseBuilder:asError() - JsonArray com status
...

DEFINE OUTPUT PARAM jsonOutput AS JsonObject NO-UNDO.

ASSIGN oJsonArray  = NEW JsonArray()
       oJsonObject = NEW JsonObject().
    
oJsonObject:Add("ErrorNumber", 1).
oJsonObject:Add("ErrorDescription", "Descrição do erro").
oJsonObject:Add("ErrorSubType", "error").

oJsonArray:Add(oJsonObject).
jsonOutput = JsonAPIResponseBuilder:asError(oJsonArray, 403). /* retorna status 403 */

...
/*
No exemplo acima será retornado um Json na variável "jsonOutput" no seguinte formato:
{
	"status":403,
	"payload":{
		"code":"1",
		"message":"Descrição do erro",
		"type":"error",
		"detailedMessage":""
	}
}
*/
JsonAPIResponseBuilder:asWarning() - Tabela temporária RowErrors
...

{method/dbotterr.i}

DEFINE OUTPUT PARAM jsonOutput AS JsonObject NO-UNDO.

DEFINE VARIABLE oJsonObject    AS JsonObject NO-UNDO.

ASSIGN oJsonObject = NEW JSONObject().
    
CREATE RowErrors.
ASSIGN RowErrors.ErrorNumber      = 1
       RowErrors.ErrorDescription = "Descrição do alerta"
       RowErrors.ErrorSubType     = "warning".
 
jsonOutput = JsonAPIResponseBuilder:asWarning(oJsonObject, TEMP-TABLE RowErrors:HANDLE).

/* ou */
jsonOutput = JsonAPIResponseBuilder:asWarning(oJsonObject, 201, TEMP-TABLE RowErrors:HANDLE). /* retorna status 201 */

...
/*
No exemplo acima será retornado um Json na variável "jsonOutput" no seguinte formato, podendo ter o status alterado:
{
	"status":200,
	"payload":{
		"_messages":{
			"code":"1",
			"message":"Descrição do alerta",
			"type":"warning",
			"detailedMessage":""
		}
	}
}
*/
JsonAPIResponseBuilder:asWarning() - JsonArray
...

{method/dbotterr.i}

DEFINE OUTPUT PARAM jsonOutput AS JsonObject NO-UNDO.

DEFINE VARIABLE oJsonArray     AS JsonArray  NO-UNDO.

ASSIGN oJsonArray  = NEW JsonArray().
           
CREATE RowErrors.
ASSIGN RowErrors.ErrorNumber      = 1
       RowErrors.ErrorDescription = "Descrição do alerta"
       RowErrors.ErrorSubType     = "warning".

jsonOutput = JsonAPIResponseBuilder:asWarning(oJsonArray, FALSE, TEMP-TABLE RowErrors:HANDLE).

...
/*
No exemplo acima será retornado um Json na variável "jsonOutput" no seguinte formato:
{
	"status":200,
	"payload":{
		"_messages":{
			"code":"1",
			"message":"Descrição do alerta",
			"type":"warning",
			"detailedMessage":""
		},
		"total":0,
		"items":[],
		"hasNext":false
	}
}
*/
JsonAPIResponseBuilder:empty()
...

DEFINE OUTPUT PARAM jsonOutput AS JsonObject NO-UNDO.

jsonOutput = JsonAPIResponseBuilder:empty().

/* ou */ 
jsonOutput = JsonAPIResponseBuilder:empty(500). /* retorna status 500 */

...
/*
No exemplo acima será retornado um Json na variável "jsonOutput" no seguinte formato, podendo ter o status alterado:
{
	"status":200,
	"payload":{}
}
*/


Mapeamento da RowErrors (include method/dbotterr.i):

CampoJsonDescrição
ErrorNumbercodeCódigo da mensagem
ErrorDescriptionmessageDescrição da mensagem
ErrorSubTypetypeTipo de mensagem
ErrorHelpdetailedMessageHelp da mensagem

Nota

A tag "details" somente aparecerá no JSON quando houver mais de uma mensagem do mesmo tipo, exemplo: duas mensagens de "error" ou duas mensagens de "warning".

Importante

O retorno dos objetos seguem o padrão conforme o "Guia de implementação de API V2.0".