Implementando o Aplicativo Logic LayerEm toda a solução, a parte mais simples é a implementação da camada lógica da aplicação. É trivial e é ilustrado pelo código Python seguinte: def atual (req, cache urlComponents): req.content_type = conn configuration.Atom.mimeType = MySQLdb.connect (host = configuration.Database.server, user = configuration.Database.user, configuration.Database.password = passwd, db = configuration.Database.db) cursor = conn.cursor () cursor.execute ( "SELECT * FROM cadastros ORDER BY DESC post_date") linha = cursor.fetchone generateHeader () (req, linha) generateEntry (req, row) row = cursor.fetchmany (configuration.Blog.entryCount - 1) para a entrada na linha: generateEntry (req, entrada) generateFooter (req) Não fique muito animado com a simplicidade do código, como o código prevê uma infra-estrutura de métodos que são chamados. O método ilustra o serviço aweb faz para a maior parte, que é aceitar dados, processá-lo e mantê-lo. Você às vezes implementar algoritmos que realizam algum tipo de cálculo. Durante o tratamento, são aplicadas regras de negócio que processam os dados enviados e recebidos. Para o alcance desta solução, os dados é empurrado e puxado, com muito pouco no meio de transformação. Um processo externo impulsiona a lógica da aplicação, que no caso da solução é um browser. A lógica da aplicação é desencadeada por uma série de pedidos que são definidas usando URLs. Existem outras maneiras de criar serviços Web que utilizam outras tecnologias, mas o foco deste artigo é sobre o uso Representational State Transfer (REST). Usando REST implica conceber e URLs usando o protocolo HTTP. Do ponto de vista do cliente Ajax, REST é um protocolo perfeito. Vamos iniciar o processo de design da aplicação, correlacionando o que o código fonte da amostra é de referência. O nome da função no código fonte da amostra é atual, e os últimos nentradas do blog são devolvidos. Ao utilizar um leitor de blog ou um cliente Ajax, você vai querer ver as entradas do blog atual, portanto, a abordagem mais simples é o URL associado http://myserver.com/ para a função atual. Ignorando a correcção do URL de agora (eu discutir isso na próxima seção), é uma pergunta válida, como é que o servidor sabe a referência cruzada de URL com uma funcionalidade específica? Por padrão, quando um servidor HTTP executa o processador URL , a URL é mapeado para um arquivo. Se o pedido foi [http://myserver.com] / dir / arquivo.html, então o servidor HTTP tentativas para encontrar o arquivo [diretório base] / dir / arquivo.html. Se o arquivo for encontrado, o processador de extensão de arquivo é carregado, o que no caso do html. Vem a ser um processador de arquivo estático. (Se a extensão é. Php ou. Aspx, então o PHP ou ASP.NET processadores são executadas e gerar conteúdos com base nas instruções no arquivo.) De uma perspectiva de descanso, este é o algoritmo do processador errado URL. É um fácil algoritmo, mas é o algoritmo errado, pelo menos do ponto de vista de descanso. Entendendo REST Why We Want A partir da perspectiva de resto, tudo URLs representam recursos no lado do servidor, no entanto, enquanto um arquivo é um recurso, ele não é um recurso a partir da perspectiva da aplicação. Esta é uma distinção muito grande que deve ser entendido: URLs REST são aplicação de recursos específicos. Usando uma aplicação de recursos específicos significa que você está expondo a funcionalidade baseada na lógica do negócio, não a tecnologia. Usando REST, você pode separar o recurso da aplicação, bem como a relação de contrato ou orientado para o desenvolvimento. Para ilustrar a separação dos recursos da aplicação, considere o seguinte código C #: IBase (Method ();) Implementation1 classe: IBase (public void Method () (Implementation2 classe)): IBase (Method () ())
A interface IBase define um método e é implementada por duas classes, Implementation1 e Implementation2. Este processo é denominado interface de desenvolvimento orientado, Porque quando o cliente usa uma aplicação, o cliente não usar a implementação efectiva, mas a interface da aplicação, como ilustra o seguinte código fonte: fábrica de classe (public static IBase Instantiate () (return Implementation1 novo ();)) classe Useit (Method () (obj = IBase Factory.Instantiate (); / / ...)) No código-fonte exemplo, a classe Factory tem um método estático, instanciar que cria uma instância do Ibase, instanciando Implementation1. Na classe UseIt.Method, uma instância do Ibase é instanciado chamando o método Factory.Instantiate. A classe Useit não tem idéia se Implementation1 ou Implementation2 é instanciado, e ele usa a interface, tal como definido pelo Ibase, esperando que os métodos de interface a ser implementado corretamente. Quando utilizar linguagens dinâmicas, você usa tipagem pato, e definiu o resultado em termos de funcionalidade contratos implícitos . Vamos relacionar interface de desenvolvimento orientado para as URLs e recurso separado da representação. O recurso é a interface, ea representação é a implementação. Atualmente, a maioria das implementações de tecnologias Web vincular o conjunto de recursos e representação ou a utilização directa, como o http://mydomain.com/item.aspx URLs e http://mydomain.com/item.jsp ilustrar. Os vínculos diretos são o. aspx e. extensões jsp, ea interface apropriada definida URL teria sido http://mydomain.com/item. Ironicamente, todas as tecnologias de Web implementar a separação dos recursos de representação para o URL / root, como ilustrado pelo seguinte HTTP conversa. (Note que a conversa foi abreviado para fins de explicação.) SolicitarGET / HTTP/1.1 Host: 192.168.1.242:8100 User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv: 1.7.8 Gecko/20050511) RespostaHTTP/1.1 200 OK Server: Apache/2.0.53 (Ubuntu) PHP/4.3.10-10ubuntu4 O fluxo de execução de um processador URL REST é simples, em que, para determinar qual o código do usuário para executar, nós simplesmente dissecar o URL. Com base na estrutura do URL, o servidor apropriado manipulador de código do lado é chamado. Se o cliente solicita o URL / blog / entradas / curso, a URL com token é blog, as entradas e atual. No caso do software do blog, o manipulador Python exige pelo menos três peças do URL que são traduzidos para a chamada Python [namespace módulo]. [Módulo]. [Função]. A URL de chamada do cliente é então traduzido para blog.enteries.current (). Todas as partes URL após as três primeiras peças são passados para a função chamada para afinar as informações necessárias. A regra da exigência de pelo menos três peças de URL é puramente específica para o meu quadro manipulador Python. Seu quadro pode precisar de dois, ou cinco, ou seja o número de peças de URL é um número arbitrário. No exemplo de blog de software, o algoritmo usado para referência cruzada a URL para o código personalizado usado Convenção sobre as técnicas de configuração. Contudo, não há nada de errado com o uso de uma tabela de referência cruzada determinadas partes da URL com um pedaço de funcionalidade personalizada. Mais uma vez, como uma referência cruzada de peças URL para a funcionalidade personalizada é com você. Ao implementar seu próprio processador REST URL, a implementação real irá variar de acordo com a tecnologia utilizada. Não há um tema comum, mas existem duas maneiras de implementar um processador REST URL: • Encontrar um caminho de URL associar uma base com um manipulador específico. Por exemplo, eu tendem a usar / serviços como base para todos os serviços do meu site. O servidor precisa apoiar a noção de que sempre que inicia o URL solicitado com / serviços, um manipulador específico é chamado. O manipulador específico chamado REST é o processador de URL que faz então a chamada do manipulador. • Se você não pode associar um manipulador de base para uma URL base, então você precisa escrever um filtro HTTP. A diferença entre um filtro HTTP e um manipulador de HTTP é que um filtro é chamado antes de um manipulador. A idéia de filtros HTTP é permitir que o código do usuário para executar determinadas etapas comuns a todos os pedidos. Um exemplo comum é a autenticação. Usando um filtro HTTP, você tem a capacidade de definir qual manipulador é chamado. No contexto do processador URL REST, o processador seria incorporado como um último passo depois de todos os outros filtros de ter executado. É o último passo, porque você quer medidas como a autenticação para executar a URL solicitada, e não a URL redirecionada a execução. Ao implementar o seu processador URL REST, você deve se lembrar que somente a URL determina qual funcionalidade é chamado. Você não deve usar um cookie HTTP como parte de sua decisão. Design como descrito posteriormente neste artigo, o uso de cookies HTTP para decidir qual a funcionalidade para executar é muito ruim. Para o alcance desta solução, isso é tudo que eu vou discutir sobre o resto do processador URL. Implementando as URLsSupondo que você tenha aplicado o seu próprio processador REST URL, o próximo passo é definir as URLs usadas. Nesta seção, eu esboço as URLs usadas na aplicação do blog e explicá-los de tal maneira que a explicação pode ser usada em caráter geral. Para todos os URLs, há um mínimo de três peças, e que é especial para o processador URL resto eu estou usando não acho que você deve usar o mesmo número de peças. A base são duas URLs / blog e / serviços / blog. Você precisa destas duas URLs base porque você está servindo a dois diferentes tipos de conteúdo: os arquivos HTML estáticos e de conteúdo da Web serviço. Em teoria, você poderia usar apenas uma URL base e têm o serviço da Web geram tudo, mas eu estou desconfiado de fazer isso, pois dificulta a realização. Vamos voltar e pensar por que ter um único URL complica a execução. Ajax Ao implementar uma aplicação SOA, você tem um cliente e um codificador codificador servidor. O codificador do cliente não faz qualquer tipo de programação do servidor e não quer, ela quer se focar no lado do cliente das coisas. Assim, o programador client-side tem que ser capaz de fazer tudo o que ele quer com arquivos estáticos servido por um servidor HTTP. Se o programador precisa aweb serviço para servir arquivos estáticos, então ele ou ela estaria dependente do programador do servidor, e que a dependência não é desejada. Por ter duas URLs base, o programador cliente pode fazer o que ele ou ela considerar apropriado, eo programador do servidor pode fazer o que ele ou ela considerar apropriado, independentes uma da outra. Nota Não há razão para você não poderia ter uma base URL como / blog e depois dividir espaço para que a base / blog / estático e de serviços / blog /. O ponto a lembrar é que você tem dois namespaces URL: um para o lado do cliente e uma para o lado do servidor. Porque eu uso o mod_python para o lado do servidor e HTTPD Apache para conteúdo estático, não faz sentido para os meus serviços de Web a ser todos Python base. Assim, eu tenho um manipulador de serviço com base na Web e serviços específicos da Web, como o software de blog, tudo implementado como um espaço para Python. O cliente-base URL lado para todas as aplicações é /, eo servidor de base URL lado é para todas as aplicações / serviços. Com outras arquiteturas, como ASP.NET, a URL base seria / blog, e, em seguida, o URL poderia ser subdividida. Não vou focar no cliente URLs de lado, porque eles são movidos pelas URLs de serviço da Web para o âmbito da aplicação blog. Por exemplo, se você tivesse a URL de entrada / services/blog/entries/archive/2006, haveria um arquivo apropriado estático URL / blog/entries/archive/2006. Antes de explicar a natureza das URLs, vamos rever os quatro verbos HTTP comum. Normalmente você usa dois verbos HTTP, GET e POST, muitas vezes com a mesma finalidade. Por exemplo, um formulário HTML pode enviar seus dados usando os métodos GET ou POST. De uma perspectiva de resto, a prática é ruim de usar GET para enviar dados para o servidor. Eu explico como usar cada verbo HTTP na lista a seguir. A melhor maneira de entender os verbos individuais é a pensar neles como instruções muito parecido com comandos SQL. A diferença entre os verbos HTTP e comandos SQL é que o SQL manipula tabelas e linhas, e HTTP manipula os recursos associados com URLs. • DELETE (Equivalente SQL excluir da): A raramente usado verbo que é usado para excluir um recurso no lado do servidor. Por exemplo, se o verbo DELETE é usado para a URL / serviços / blog / archive / entradas, o resultado é que todas as entradas de blog no servidor são excluídos. Se o URL tiver parâmetros de consulta a ele associados (por exemplo, ticker = DELL & valor = 23), em seguida, todas as entradas que correspondem aos parâmetros de consulta são suprimidos. No SQL-falar (e em termos de comando delete), os parâmetros de consulta SQL onde estão os parâmetros. • GET (Equivalente SQL Selecione): Um comumente usado verbo que é usado para recuperar o conteúdo do servidor. A URL especificada recupera os recursos associados com a URL. Se houver parâmetros de consulta, uma seleção de artigos relacionados com a URL que coincidem com os parâmetros de consulta é executada. No SQL-falam os parâmetros de consulta são os que os parâmetros associados com a instrução SELECT. • POST (Equivalente procedimentos armazenados SQL): Um comumente usado verbo que é usado para enviar dados ao servidor. É importante considerar um POST HTTP como um procedimento armazenado. As coisas ficam engraçadas com um POST HTTP para interpretar o papel do URL. Pode-se dizer que a URL define o recurso que é manipulada, e os parâmetros de definir a forma de manipular os recursos, mas que não é a natureza de um procedimento armazenado SQL. O nome do procedimento armazenado não tem impacto sobre as tabelas que são manipuladas. Então, uma outra visão de correio poderia ser o de definir um recurso que manipula outros recursos, e que os recursos são manipulados depende da implementação de um HTTP POST. Escolha qualquer definição faz sentido para você. Acho um POST HTTP para ser ao mesmo tempo demasiado gerais e também específicas para pregar para baixo a uma única idéia. Eu, pessoalmente, escolher a primeira solução, onde o URL define os recursos para manipular, e que o algoritmo usado para manipular o recurso depende dos parâmetros. Um POST HTTP pode gerar dados, embora geralmente não é usado. Na SQL-speak, procedimentos armazenados podem gerar resultados, embora na maioria das vezes você usaria o comando select. • Coloque (Equivalente SQL Inserir): A raramente usado verbo que é usado para substituir o conteúdo de um recurso. Se o recurso associado a URL não existe, então ele é criado. As URLs usadas pelo aplicativo são descritos nas secções que se seguem. / serviços / blog / entradas / corrente Especificamente, este URL representa a última n entradas de um blog. Com o passar do tempo, o último nentradas de mudança, e você pode usar um único URL de referência para as informações mais recentes e melhores. Em um sentido abstrato, a URL representa um ponto de vista sobre alguns dados. O problema que você terá em sua aplicação é que as pessoas querem um único URL que podem usar até o fim dos tempos. Por exemplo, voltando ao exemplo do blog, se o mês é de 06, o dia é 07, eo ano é 2006, depois de obter as entradas mais recentes e melhores blog, você só tem a referência do ano adequada, mês e dia URLs. O problema é que ninguém faria isso, pois é muito complicado e requer o conhecimento de como os dados são organizados. Outra forma de organizar as entradas do blog é usar números incrementais ou valores muito que contar os segundos desde 1970. Por ter uma "visão" URL, você cria uma referência a dados organizados por um algoritmo serverside incorporado. O servidor algoritmo de lado não é evidente para o utilizador, e não precisa ser. Tenha muito cuidado de permitir que os parâmetros de consulta para selecionar dados a partir do ponto de vista. O objetivo da exibição URL é fornecer um fácil de lembrar e URL exclusivo. Permitir que os parâmetros de consulta com um URL de exibição é bobagem, porque o mesmo efeito pode ser conseguido usando um recurso de URL, como você verá em breve. Exibir URLs para a maior parte só aceitam HTTP GET. Exibir URLs não deve aceitar um PUT ou DELETE HTTP porque os dados recuperados é uma referência para outra URL. Se quiser apoiar um PUT ou DELETE HTTP em uma URL ver, é preciso eliminar ou substituir a lógica associada ao URL, e não os dados. É mais difícil determinar se uma URL opinião, deveria aceitar um HTTP POST. Pode-se argumentar que um HTTP POST de URLs vista não faz sentido, porque na maioria das vezes você não pode atualizar os dados gerados por uma exibição SQL. Eu me oponho a que, desde uma visão URL contenha alguma lógica para extrair os dados apropriadas e POST HTTP contém uma lógica, um POST HTTP pode ser usado para inserir dados. Quanto ao pedido do blog, postando a URL / serviços / blog / entradas / corrente teria o efeito de adicionar uma entrada de blog no momento em que ele foi postado. Se você tivesse que HTTP PUT uma nova entrada de blog, o cliente teria que saber como o servidor organiza os dados subjacentes blog. O pedido blog discutidos neste artigo está organizado por data, mas não precisa ser. / serviços / blog / entradas / archive Este URL especifica a URL raiz base para todas as entradas do blog armazenados no servidor HTTP. Em um sentido abstrato, todos os serviços da Web têm uma noção de raiz de recursos URL. A finalidade do recurso raiz URL é definir um ponto de entrada principal para todos os recursos do Web Service. Pense nisto URL como a index.html do seu Web Service. Isso não quer dizer que alguns URLs estão desligados da base de hierarquia raiz URL (por exemplo, URLs de exibição), mas isso não significa que um dispositivo final pode percorrer todos os recursos utilizando a URL raiz. A raiz URL é também um exemplo de um URL coleção. Coleção URLs comportar um pouco diferente do que URLs regular. Por exemplo, considere o seguinte duas respostas para a URL raiz. Observe que o URL não deve retornar XML, mas XML é usado para simplificar.
Há duas respostas no código de exemplo. A primeira resposta é um elemento raiz, que tem como uma criança de um elemento único item. O elemento item contém nenhum elemento filho e tem dois atributos, href e id. A segunda resposta é como a primeira, exceto o item tem um elemento filho de dados, e não há nenhum atributo href. Em vez disso, na segunda resposta, há uma referência de URL. A diferença entre as duas respostas é a tradução do que deve ser devolvido quando uma coleção URL é referenciado. Uma coleção de URL é uma URL que não contém quaisquer dados, mas serve como uma referência a uma coleção de peças de dados. Quando a coleta de URL é referenciado, o cliente pode retornar um conjunto de referências de URL para os dados reais ou os dados propriamente dita. Tomando como exemplo o pedido do blog, referenciando o formato Atom coleção URL meios para retornar todas as peças de dados. No entanto, muitas vezes é impraticável para retornar todas as peças de dados, como o fluxo de dados retornado pode ser gigantescos. Para reduzir o tráfego, as referências da ligação são devolvidos. Mas perseguir nosso rabo mais uma vez, vários formatos não permitem ligações. Como regra geral, devolver o que é mais adequada para sua aplicação. Independentemente de como você retornar os dados, ser coerente. Isto significa que se todas as URLs de coleta de dados de retorno, em seguida, os dados de retorno, e vice-versa. A raiz ou URL de coleta para a maior parte será chamada usando o verbo HTTP GET. Haverá, provavelmente, os parâmetros de consulta para selecionar entradas específicas, que, quando aplicado URLs com um grande número de entradas reduz o tamanho do documento. Por exemplo, a URL ver / serviços / blog / entradas / corrente também pode ser expressa como / serviços / blog / entradas / arquivo? Passado = 35. A última consulta parâmetro é usado para selecionar os últimos n entradas. Os verbos HTTP PUT e DELETE pode aplicar-se as entradas de coleção válido são adicionados. Enquanto é possível converter uma URL para uma coleção de dados de recursos URL, não faz sentido fazê-lo apenas se o servidor não gerar dinamicamente a coleção. Por exemplo, no caso do software do blog, a coleção é gerada a partir de um banco de dados. Executando PUT ou DELETE não faz sentido a menos que há uma lógica que processa os dados enviados pelos comandos. E, finalmente, é possível um processo de HTTP POST se não é associado lógica de servidor. / services/blog/entries/archive/2006/07/06 Este URL especifica uma data-URL do recurso que, quando referenciado contém os dados de um usuário está interessado em Os dados que são enviados é determinado pelo cliente no cabeçalho HTTP Accept (isto é discutida no artigo 5). A data-URL do recurso é capaz de processar todos os verbos HTTP (GET, PUT, POST e DELETE), conforme explicado nas seções anteriores. Quando a URL é referenciado, um pedaço de dados são retornados, mas você tem que perguntar a si mesmo o formato dos dados é. Utilizar a aplicação do blog como um exemplo, o conjunto de dados retornado deve fazer parecer que a URL está referenciando uma coleção de URL, porque o formato Atom é um formato único que assume cada URL é um conjunto de entradas de blog, embora possa haver somente uma única entrada. Então, quando você criar dados de URLs de recurso, tenha em mente que, embora logicamente, eles são uma peça única de dados, o formato dos dados poderia fazer a URL parecer uma URL coleção. Quando o cliente executa um HTTP GET, o servidor terá nenhum problema de geração de dados. O servidor pode ficar confuso, no entanto, se o cliente executa um PUT ou um HTTP POST. Os dados enviados para o servidor pode conter várias partes de dados, mesmo que o servidor espera apenas um único de dados. Assim, a solução lógica é a de gerar um erro dizendo que os usuários não podem postar entradas múltiplas. Outra solução poderia envolver olhando através da lista de entradas e postar a primeira entrada. O problema com essa estratégia é que ela é incompatível com a intenção do cliente. Quando o cliente envia os dados que contém várias informações, eles esperam que as várias partes de informações que devem ser salvos. Se o servidor guarda apenas uma peça, o cliente fica perguntando o que deu errado. Quando um erro é gerado, o cliente não fica se perguntando o que deu errado. Os dados de URLs de recursos precisa ser tão específico quanto possível. Você não quer qualquer ambiguidade resultante em algum momento posterior. Por exemplo, se o pedido hoje seu blog permite que apenas um único usuário, mas em algum momento no futuro, pode permitir que vários usuários, em seguida, adicione essa funcionalidade. No caso do pedido de blog, isso significaria / user / serviços. Para a versão inicial da aplicação, / user / serviços possam ser codificados e não pertinentes ao processar o URL. No entanto, você criou um espaço reservado para o caso quando você tem vários usuários. Não estou dizendo que você deve compensar qualquer variação potencial no futuro, porque depois de tudo que você pode usar o redirecionamento do servidor (por exemplo, http://user.server/services). O que você quer lembrar é que os dados de URLs de recursos outlive seu servidor, sua tecnologia, e até mesmo a sua empresa. URLs são como peças de imobiliário e fazem parte do seu reconhecimento da marca, por isso você deve escolhê-los cuidadosamente. Quando as pessoas conhecem e associar um determinado URL com aweb site ou empresa, é muito difícil para essas pessoas a mudar para outro URL. Por exemplo, imagine-se amanhã o Google decidiu chamar-se ReallyCoolServer. A empresa ReallyCoolServer não seria imediatamente ter o mesmo impacto ou o reconhecimento da marca como o Google tem hoje. / serviços / blog / entradas / arquivo? delete = 35 e / services/blog/entries/archive/2005? passado = 35 Os exemplos neste artigo mostram que os URLs podem ter parâmetros de consulta. No entanto, ambas as URLs apresentados nesta seção cabeçalho não são exemplos da lógica que tem a mesma intenção, apenas um segundo é um URL aceitável. O primeiro URL não é aceitável porque implica alterar os dados. Você já utilizados anteriormente, os parâmetros de consulta para executar uma operação de filtragem de um HTTP GET. Usando parâmetros de consulta nesse contexto é aceitável porque não mudar a natureza subjacente dos dados; você está especificando um filtro. O filtro pode ser usado para converter o conjunto de resultados de uma língua para outra, e pode conter algoritmos complexos. Mas, independentemente do algoritmo, não há nenhuma mudança para os dados que está sendo filtrada. O primeiro URL, / serviços / blog / entradas / arquivo? Delete = 35, é diferente em que ele usa a palavra "delete" e "apagar" os meios para excluir um registro (s). Assim, o parâmetro de consulta mudará os dados subjacentes e não é aceitável. Evidentemente, há uma exceção se a palavra "eliminar" não significa eliminar, no sentido de "excluir da fonte de dados", mas significa excluir do conjunto de resultados gerados. Então, a excluir-chave torna-se uma operação de filtragem e é aceitável. As alterações nos dados subjacentes são o resultado da execução do HTTP POST, PUT, DELETE ou verbo. As URLs usadas pelo aplicativo blog são relativamente genéricas e ilustrar a maior parte das variações que você vai encontrar quando REST construir serviços baseados na web. Em geral, você deve se lembrar que a construção REST serviços baseados na Web é como interagir com um banco de dados que suporta SQL. Você tem um número de verbos HTTP que pode ser usado para adicionar, manipular, apagar e recuperar dados. Como os dados são gerenciados é da responsabilidade do designer serviço REST web. Eu não estou indo a pé através da implementação do servidor, pois é uma questão de aplicação. No caso do pedido do blog, você está manipulando entradas de blog, que a lógica de negócios muito pouco. Por exemplo, se você contraste um blog com um pedido de aplicação de hipoteca, você pode ver que um pedido de hipoteca tem um pouco de lógica, e tem também um tipo de URL que não contém dados e é definida como se segue. / serviços / mortgage / calcular / pagamentos O URL não está definida uma data-URL do recurso, mas uma questão "de, a resposta fora" URL. Não há dados do servidor, ou exibição de dados, ou coleta de dados. Existe apenas um cálculo, portanto, o verbo HTTP que só pode ser usado é HTTP POST. Os outros verbos HTTP não fazem sentido e não devem ser usadas neste contexto. um artigo submetido por Sonja Lande Isenção de responsabilidade:O nosso site não se responsabiliza pelo conteúdo deste artigo. Webarticles é uma fonte de informação livre. Importante: Este artigo "Aplicação do Logic Application Layer" foi traduzida por um software automático. Nós sentimos muito por quaisquer erros de ortografia que pode ter ocorrido. Obrigado pela sua compreensão.
|
|||||
| Online: 242 users browsing the articles directory |
|
|