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获得的信息。 例如getByParam或getAll
从翻新的角度来看,baseUrl类似于
"http://192.168.0.1/unf/hs/inntsd/v1/"
,其中:
- 192.168.0.1-发布HTTP服务的服务器
- / unf -1C数据库名称
- / hs -HTTP服务的静态部分
- / inntsd是整个服务的根URL。 随便打电话
考虑接收请求的过程。
Get()
在此示例中,有许多错误的提示。 例如,
目录名称,操作需要转换为枚举或具有匹配项的新目录。 但是在补充中实现它有多优雅,我还没有决定。
让我们
解析一下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";
我们将全部交给客户。
= (200, ) ;
不管我们从1C得到什么。 我们总是试图正确回答。
(, ) = ; = (); .("code", ); .("description", ); .("result", ); .("payload", ); ;
仅此而已。 所有其他方法都以类似的方式实现。 提出问题,我很乐意回答。