在TSD上的应用以及通过HTTP服务与1C:Enterprise 8.3的通信。 第2部分(1C端的API实现)

1.交换方式的选择。 API说明。

2.在1C方面实现API。


3. 在TSD上的应用程序以及通过HTTP服务与1C:Enterprise 8.3进行通信。 第3部分(BroadcastReceiver。获取数据)

关于如何在Internet上创建HTTP服务的手册很多。 因此,我将立即描述其实现。 我们的服务包含三种网址格式:

  • 目录 -/ v1 /目录/ {目录} / {动作}
  • 文件 -/ v1 /文件/ {文件} / {动作}
  • 服务 -/ v1 /服务/ {动作}


为了不使文章膨胀,请考虑参考书“命名法”中的示例。 1C不允许我们为HTTP方法使用不同的路径,因此,URL模式将是(/ v1 /目录/商品/ {Action},为此定义了两个HTTP方法GET,POST;在其他模式中,我们还将使用GET,POST。
  • / v1-将来将允许我们支持多个API选项。 我们将能够添加URL模板v_V2_Directories以及相应的以/ v2开头的路径
  • / catalogs / wares- 目录集成了所有目录。 这是方法的静态部分。 产品符合命名目录。 1C会将“商品”放入URL 参数中 。 应当指出,我们自己想出了办法。 然后我们也考虑如何自己在1C中处理它们
  • {Action} -在这里,我们将传递想要从1C获得的信息。 例如getByParamgetAll


从翻新的角度来看,baseUrl类似于"http://192.168.0.1/unf/hs/inntsd/v1/" ,其中:

  • 192.168.0.1-发布HTTP服务的服务器
  • / unf -1C数据库名称
  • / hs -HTTP服务的静态部分
  • / inntsd是整个服务的根URL。 随便打电话


考虑接收请求的过程。

  Get() //  .       Get   //Post  = (, "GET"); //middleware.      .  = ();     = ();  (, )   = (); //   {}  = (); //   {}  = (); //     URL.      .URL  =(); //      .     Firefox ,  Google Chrome   =  ; .("", ); .("", ); .("", ); .("", ); .("", );  ;   ()  = ..("Content-Type");  =  ; .("", ); //     "Content-Type","content-type", "Content-type"   =    = ..("content-type"); ;   =    = ..("ontent-type"); ;   =   .("", );  ; ;  ((), "multipart/form-data") > 0   = ();  ((), "application/json") > 0   = JSON();  .("", ); ;  ;  //      JSON    .     .  JSON(); JSON =  JSON;  = .(); JSON.();   = JSON(JSON,,"sampleDate",JSON.ISO); .("", );   =  ; .("", ); ; JSON.();  ;  


在此示例中,有许多错误的提示。 例如, 目录名称,操作需要转换为枚举或具有匹配项的新目录。 但是在补充中实现它有多优雅,我还没有决定。

让我们解析一下getByParam请求。 完整地址:/ v1 /目录/商品/ getByParam?属性= byCode和比较=类似地&searchString = 239

找出我们正在使用的目录。
  ()  . = ""   = ();  . = ""   = ()   = (100, "    " + .); ;  ;  


获取请求方法。 并且我们检查所有参数是否都附加到该方法上。 在这里应该注意的是我不做深入检查。 由于我同时为1C和Android写作。
  ()  . = ""   = ..("prop");  = ..("comparison");  = ..("searchString");  ( = )  ( = )  ( = )   = (103, "     /      ");  ; ;  = (, , );  = (0, ""); .("payload", );  . = ""   = ();  = (0, ""); .("payload", );   = ("102", "     " + .); ;  ;  


如果一切都好。 我们为答案准备数据。
  (, , )  =  ;  = "  | .  , | .  , | .  , | .  , | ..   | | .   | |  . |  {}";  = "";  () = ("byCode")   = ".";  () = ("byArticle")   = ".";  () = ("byName")   = "."; ;  () = ("equally")   =  + " = &";  () = ("similarly")   =  + "  &"; ;  = (, "{}", ); . = ;  () = ("similarly")   = "%" +  + "%"; ; .("", );  = .().();  = .();  =  ;       .( ("code,article, name, fullName, unit", ., ., ., ., .)); ;  =  ; .("quantity", ); .("wares", );  ;  


最后,我们将所有事物团结在一起。 我们将其放入JSON并发送响应。
  = (0, ""); .("payload", );  ;  (, )   = (); HTTP =  HTTP(); HTTP.["Content-Type"] = "application/json; charset=utf-8"; //   json UTF-8 // ToDo CORS //HTTP.["Access-Control-Allow-Origin"] = ; //HTTP.["Access-Control-Allow-Credentials"] = "true"; HTTP.();  HTTP;   () JSON =  JSON(, .,,,,,,,);  =  JSON; . = ; .(JSON);  =  JSON; . = JSON.; . = JSON.ISO; JSON(, , );  = .();  ;  


我们将全部交给客户。
  = (200, )  ; 


不管我们从1C得到什么。 我们总是试图正确回答。
  (, )  =  ;  =  (); .("code", ); .("description", ); .("result", ); .("payload",  );  ;  


仅此而已。 所有其他方法都以类似的方式实现。 提出问题,我很乐意回答。

Source: https://habr.com/ru/post/zh-CN473546/


All Articles