1. A escolha do método de troca. Descrição da API.2. Implementação da API ao lado de 1C.
3.
Aplicação no TSD e comunicação com 1C: Enterprise 8.3 através do serviço HTTP. Parte 3 (BroadcastReceiver. Obtendo dados)Existem muitos manuais sobre como criar um serviço HTTP na Internet. Portanto, descreverei imediatamente a implementação. Nosso serviço consiste em três padrões de URL:
- Diretórios - / v1 / catalogs / {Diretório} / {Ação}
- Documentos - / v1 / documents / {Document} / {Action}
- Serviços - / v1 / services / {Ação}
Para não inflar o artigo, considere o exemplo com o livro de referência "Nomenclatura". 1C não nos permite ter caminhos diferentes para os métodos HTTP. Portanto, o padrão da URL será (/ v1 / catalogs / wares / {Action}, para o qual dois métodos HTTP GET, POST são definidos. Em outros padrões, também usaremos GET, POST.
- / v1 - nos permitirá suportar várias opções de API no futuro. Poderemos adicionar o modelo de URL v_V2_Directories e, consequentemente, o caminho para começar com / v2
- / catalogs / wares / - catalogs integra todos os diretórios. Esta é a parte estática do caminho. wares está em conformidade com o Diretório de Nomenclatura. 1C colocará "mercadorias" nos parâmetros de URL. Note-se que nós mesmos criamos maneiras. E então também pensamos em como processá-los em 1C
- {Ação} - aqui passaremos o que queremos obter do 1C. Por exemplo, getByParam ou getAll
Do ponto de vista do Retrofit, o baseUrl será semelhante a
"http://192.168.0.1/unf/hs/inntsd/v1/"
que:
- 192.168.0.1 - Servidor em que o serviço HTTP é publicado
- / unf - nome do banco de dados 1C
- / hs - parte estática para serviços HTTP
- / inntsd é a URL raiz de todo o serviço. Ligue como quisermos
Considere o procedimento para receber uma solicitação.
Get()
Existem muitas dicas ruins neste exemplo. Por exemplo,
Nome do Diretório, Ação precisa ser convertido em uma enumeração ou em um novo diretório com correspondências. Mas como é elegante implementar no suplemento, ainda não decidi.
Vamos
analisar a solicitação
getByParam . Endereço completo: / v1 / catalogs / wares / getByParam? Prop = byCode & Comparação = similar & searchString = 239
Descubra em qual diretório estamos trabalhando.
() . = "" = (); . = "" = () = (100, " " + .); ; ;
Obtenha o método de solicitação. E verificamos que todos os parâmetros estão anexados ao método. Aqui deve notar-se uma verificação profunda que não. Desde que eu estou escrevendo para 1C e Android.
() . = "" = ..("prop"); = ..("comparison"); = ..("searchString"); ( = ) ( = ) ( = ) = (103, " / "); ; ; = (, , ); = (0, ""); .("payload", ); . = "" = (); = (0, ""); .("payload", ); = ("102", " " + .); ; ;
Se tudo estiver bem. Preparamos os dados para a resposta.
(, , ) = ; = " | . , | . , | . , | . , | .. | | . | | . | {}"; = ""; () = ("byCode") = "."; () = ("byArticle") = "."; () = ("byName") = "."; ; () = ("equally") = + " = &"; () = ("similarly") = + " &"; ; = (, "{}", ); . = ; () = ("similarly") = "%" + + "%"; ; .("", ); = .().(); = .(); = ; .( ("code,article, name, fullName, unit", ., ., ., ., .)); ; = ; .("quantity", ); .("wares", ); ;
E, finalmente, unimos tudo. Colocamos isso no JSON e enviamos a resposta.
= (0, ""); .("payload", ); ; (, ) = (); HTTP = HTTP(); HTTP.["Content-Type"] = "application/json; charset=utf-8";
E nós damos tudo ao cliente.
= (200, ) ;
Independentemente do que obtivemos do 1C. Nós sempre tentamos responder corretamente.
(, ) = ; = (); .("code", ); .("description", ); .("result", ); .("payload", ); ;
Só isso. Todos os outros métodos são implementados de maneira semelhante. Faça perguntas, terei prazer em responder.