我写了一个简单的webform,它将获取用户的信息(通过POST)并将其插入数据库。这不是我典型的编程类型,但它足够基本,我没有遇到任何麻烦。
无论如何,网页表单存在于html页面中,并且非常标准。类似下面的内容(简化示例):
<form method="post" action="/cgi-bin/submit_form" enctype="x-www-form-encoded" id="frm">
<input id="txtName" type="text" />
<input id="txtPhone" type="text" />
<input id="btnSubmit" type="submit" value="Submit" />
</form>
我有一个C ++应用程序(cgi-bin/submit_form
),它在提交时运行并将数据存储在数据库中。
我写了一个非常基本的CGI库,基本上解析输出,看起来像这样:
txtName=<name>&txtPhone=<phone>&btnSubmit=Submit
图书馆将其解析为map<string, string>
,如下所示:
myMap["txtName"] = "John";
myMap["txtPhone"] = "1.800.555.5555";
然后很容易放入数据库。但是,很明显我的应用程序完全依赖于html元素变量名称(txtName,txtPhone)。如果其中任何一个被更改,我的应用程序突然停止工作。
我的问题是:如何将从CGI获取数据的过程同步到服务器端应用程序?
我很幸运,我负责html和服务器脚本。但必须有一个人管理网站和另一个人管理脚本的场景,他们必须以某种方式进行协调,以确保没有任何不好的事情发生。
在这些类型的情况下,可以使用ICD。例如,在传递XML数据时,可以使用XSD来定义数据结构。
CGI编程有这样的东西吗?我非常害怕我的应用程序是多么脆弱和易于破解。
答案 0 :(得分:3)
我认为通过“同步”你指的是数据模型的演变,而不是关键代码段的互斥锁定。
处理此问题的一种(部分)方法是生成HTML并从定义字段的共享数据库中驱动CGI脚本。
答案 1 :(得分:3)
您指的是HTML元素名称与CGI脚本正在解析的字段之间的变化?
就像XSD这样正式的事情,我不相信。
通常,这与
属于同一类解决方案...即,POST值是完全自由格式的字符串,并且由您的服务器随意读取,忽略或抱怨。 (正如您可以在您的环境或SMTP标头中自由包含“垃圾”一样,最高可达到您发送给它们的任何系统的容忍限度。)
也就是说,如果你做有一个单独的设计师编写漂亮的HTML文档,另一个人编写他们发布的应用程序,那么就有许多特殊的协作方式。就个人而言,我通常使用Perl的POD或Javadoc(或任何适合/类似的内联文档工具用于您的语言)来记录可接受的参数和限制,并将这些可用于艺术部门(或任何人)作为优秀的HTML页面可以假装读。
如果你的意思是SQL表列,那么有许多工具可以直接从SQL服务器生成相当不错的文档,从SHOW CREATE TABLE foo
向上...... SQL DDL本身就是一个模式按照XSD的顺序。
答案 2 :(得分:0)