PDEF编译器

pdef-compiler的Python项目详细描述


pdef-用于web的接口定义语言
==================
pdef(pi:def,代表"协议定义[语言]")是静态类型的接口
定义语言,支持json和简单的http rpc。它允许编写
接口和数据结构,然后为
不同语言生成代码和rpc客户端/服务器。它适用于公共api、内部面向服务的api、
配置文件,作为持久性、缓存、消息队列、日志等的格式。
功能:

-包、模块、导入和命名空间。
-循环模块导入和类型引用(有一些限制)。
-简单类型系统建立在数据结构和接口之间的清晰分离之上。
-消息和接口继承。
-链式方法调用。
-默认json格式和http-rpc。
-可插入松散耦合格式和rpc。
-可插入代码生成器。


-[ Objto-C](http://Github.com/PDEF/PDEF Objc)
< BR/>链接
-
-**[语言指南](DOCS/语言指南.MD)**BR/> -[风格指南](DOCS/样式指南)。语言< BR/> ---BR/>md)
-[json格式](docs/json format.md)
-[http-rpc](docs/http-rpc.md)
-[bnf语法](docs/grammar.bnf)
-[generated and language-specific code](docs/generated lang-specific code.md)
-[如何编写代码生成器](https://github.com/pdef/pdef-generator-template)
-[google group)(https://groups.google.com/d/forum/pdef)(pdef@googlegroups.com)



requirements
----
-编译器需要python 2.7或python 3.3。
-绑定要求是特定于语言的。



er、可插入代码生成器和特定于语言的绑定。

安装代码生成器:BR/> ` BASH < BR/> $PIP安装PDEF JavaBR/> PIP安装PDEF Python BR/> $PIP安装PDEF Objc:BR/> ` BR/>< BR/>用测试包运行检查命令以检查编译器工作:
` BASH
$PDFEC检查HTTPS://RAW.GITHUBCOM/PDFE/PDEF/master/example/world.yaml
```


Getting Started
----
创建一个包文件`myproject.yaml`
``yaml
包:
名称:myproject
模块:
-posts
-照片
````


创建模块文件:

`posts.pdef`
``pdef
命名空间myproject;
导入myproject.photos;


接口post{
获取(id int64)post;

@post
创建(标题字符串,文本字符串)post;
}

消息post{
id int64;
标题字符串;
文本字符串;
ph照片:gb//>,
'br/> 'bd/b>命名空间MyPosits;
BR/>消息图片{BR/> ID In64;
URL字符串;
} BR/> ` BR/>< BR/>生成源代码:
'Bash
$pDEFC生成Java MyPrimeStudio .YAML -OUTUBED /BR/> $PDFEC GEANER OTOS列表ate objc myproject.yaml--out generated/
$pdefc generate python myproject.yaml--out generated/
````

example
----
example package[源](https://github.com/pdef/pdef/tree/master/example/)。

接口:
``pdef
命名空间世界;
tinents,space;//从一个包中导入两个模块。

/**
*世界接口。
*上帝般的人可以使用它来统治世界。
*/
接口世界{
/**返回人类接口。*/
humans()humans;//返回另一个interface.

/**返回大陆界面。*/
continers()continers;//返回另一个模块的接口。

/**切换灯光。*/
switchDayNight()void;

/**返回上一个世界事件,这些事件是多态的。*/
events(limit int32,offset int64)list<;event>;;
}


interface humans{
/**按id查找人。*/
查找(id int64)human;

/**列出所有人。*/
all(limit int32,offset int32)list<;human>;;

/**创建一个human。*/
@post//post方法(一个变异器)。
创建(人类)人类;
}
``````

枚举:
``pdef
枚举性别{
男性、女性、不清楚;
}

///一个鉴别器。
枚举事件类型{
人类事件,
人类创建,
人类死亡;
r/>```

消息:
``pdef
消息的东西{/一个简单的消息定义。
id int64;//int64类型的id字段。
位置位置;
}


/**人类是原始人科的灵长目动物,也是现存的唯一一种雌雄同体属的雌蕊。*/
消息人:thing{//带有基本消息和docstring的消息。
名称字符串;
生日日期时间;
性别;
大陆大陆;
}
``````

h event type作为其鉴别器。
消息事件{
类型eventtype@discriminator;
id int32;
时间日期时间;
}


///多态子类型。
消息human event:event(eventtype.human_event){
>human;
}

///多级poly变形消息。
message human created:humanevent(eventtype.human\created){}
message human died:humanevent(eventtype.human\died){}
````

ly生成的客户端。例如,
没有真正的服务器。

ight:
`` bash
$curl-x post http://example.com/world/switchthelight
{
"data":null
}
`````

列出人物:
`` bash
$curl"http://example.com/world/humans/all?limit=2&offset=10"
{
"data":[
{"id":11,"name":"john"},
{"id":12,"name":"jane"}
]
}
````



许可和版权
----
版权:2013 Ivan Korobkov<;Ivan.Korobkov@gmail.com>;

er the apache license,version 2.0("许可证");
除非符合许可证,否则您不得使用此文件。
除非适用法律要求或书面同意,否则您可以在http://www.apache.org/licenses/license-2.0



根据许可证分发的内容是"按原样"分发的,
没有任何形式的保证或条件,无论是明示的还是默示的。
请参阅许可证,了解管辖许可权的特定语言和许可证下的限制。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
验证Java验证用户输入的一系列数字   java如何在SpringBoot中字段验证失败时在ConstraintViolationException中获取RequestParam名称   java如何解决Vertx阻塞DNS问题   java意外类型平均值   java如何将dataframe的UUID列转换为包含相同十六进制序列的简单字符串?   身份散列映射的java用法   java无法在eclipse中导入现有项目   进程从运行的java程序中获取CPU号   java将文本视图的特定行滚动到顶部在最后一个屏幕上不起作用   无法初始化java SpringSecurityFilterChain   java当我在项目中使用volatile时,为什么下面的代码显示不同的结果?   是否有转换java的标准方法。util。函数,消费者<T>转换为java。util。作用函数<T,Void>   java nginx分块传输编码失败   java如何将几个IF转换为一个循环   java URI从路径中删除/删除