Implementação de um ponto final de repouso Server-Side personalizado
Aplica-se a: Windows Azure Pack
O lado do servidor fornece um conjunto de APIs REST que são chamados pelo lado do cliente para recuperar dados e executar operações. Ambos os tipos de operação normalmente pedem um backend para obter os dados reais, ou realizar a operação real. O controlador, que é o que implementa a API, é geralmente um controlador de MVC ASP.NET que devolve o JSON, e o backend será tipicamente API de Gestão de Serviços, mas pode ser qualquer outro serviço acessível a partir de um web site ASP.NET MVC.
Importante
A amostra Hello World fornece uma implementação do lado do servidor da amostra.
Tanto o lado do cliente como o servidor podem residir no mesmo projeto Visual Studio e são implantados no mesmo portal de gestão.
Classe Controladora
A classe de controlador é uma instância de uma das classes abstratas padrão ASP.NET MVC Controller ou AsyncController. Normalmente será marcado com os atributos [RequireHttps] para garantir que apenas são permitidas ligações seguras, [OutputCache] para não permitir o caching de respostas, e [PortalExceptionHandler] que é descrito na seguinte secção de Erros de Manuseamento . Para prevenir ataques de Phishing, os métodos no controlador são marcados com [HttpPost]. Isto não permite pedidos HTTP GET ao mesmo tempo que permite pedidos HTTP POST. Nem as estruturas laterais do cliente nem do servidor colocam quaisquer restrições na forma como o servidor e os lados do cliente falam entre si, com exceção de onde é necessária interação com o widget Grid do lado do cliente. Nesse caso, consulte a seguinte secção de Conjuntos de Dados de Retorno .
Conjuntos de dados de retorno
Um conjunto de dados é uma lista de dados a serem mostrados pela UI, tipicamente numa lista (vista de grelha). É diferente de uma resposta padrão, na qual a estrutura do lado do cliente lida com a recuperação e exibição numa grelha. Se um método estiver a devolver um conjunto de dados, tipicamente representado na UI como uma lista, recomenda-se a utilização do método Controller.JsonDataSet como no seguinte exemplo:
return this.JsonDataSet(listOfData);
Isto encerra automaticamente o conjunto de dados listOfData num invólucro JSON adequado para o processamento pela estrutura do lado do cliente. Para obter informações sobre a implementação do lado do cliente, consulte Como exibir uma grelha numa extensão do Portal de Gestão de Pacotes Azure Windows.
Realização de Comandos
Os métodos que executam comandos no controlador normalmente devolvem um objeto JSON para mostrar que a operação funcionou. Isto pode ser tão simples como um booleano significando sucesso, ou tão complexo como os dados que mudaram como resultado da operação. Nada, embora seja realmente exigido pelo cliente ou por estruturas do lado do servidor.
Erros de manipulação
As exceções lançadas pelo controlador devem, em geral, ser mostradas ao utilizador para mais ações ou seguimentos. A maneira mais fácil de fazer isto no lado do servidor é aplicar o atributo [PortalExceptionHandler] à sua classe. Quaisquer exceções do tipo PortalException serão traduzidas para JSON corretamente modelado, terão o código de erro HTTP apropriado e serão devolvidos ao lado do cliente para visualização fácil com uma notificação de erro. Um exemplo do JSON devolvido por erro com o atributo [PortalExceptionHandler] está abaixo:
{
"message": "Fake Error",
"ErrorMessage": "Fake Error",
"httpStatusCode": "InternalServerError",
"operationTrackingId": null,
"stackTrace": null,
}
Qualquer outro tipo de exceção será apresentado como um erro HTTP 500 vazio, para evitar expor detalhes internos ao utilizador. Além disso, os vestígios de pilha só serão enviados se o portal em que a extensão está em execução tiver o DevelopmentMode definido como verdadeiro. Isto pode ser alterado no ficheiro web.config do portal de gestão. Para mais informações, consulte a secção UI para erros devolvidos a partir de chamadas da API.
Consulte também
extensões de interface de utilizador do portal de gestão de pacotes Windows Azure
Como exibir uma grelha numa extensão do portal de gestão de pacotes Azure Windows
Depurar uma extensão do portal de gestão de pacotes Azure pack Windows