neiapi / nei-toolkit Goto Github PK
View Code? Open in Web Editor NEWNEI 接口文档管理平台配套自动化工具
Home Page: https://nei.netease.com
License: MIT License
NEI 接口文档管理平台配套自动化工具
Home Page: https://nei.netease.com
License: MIT License
目前页面的 js、css 以及 mcss 文件是按页面所引用的模板路径生成的,应该按页面路径生成才合理。
新增加的 productName 参数,默认为 null,必须指定,否则直接报错退出。具体实现过程如下:
--project
的值为空,则将它的值设置为 ./{{productName}}
,相对于模板工程目录。如果命令行中有 --project
参数,则优先使用命令行中的值,此时的路径也是相对于模板工程目录。./{{productName}}/{{resOut}}
,即在它前面追回 productName 的值空白工程要做的修改:
在 iOS 工程模板中,需要将 --project
设置为空,resOut
参数不要包含 productName 的路径。模板数据文件(NEIKey.json)中的 ProductName 设置为空。build.json 文件内容参考如下:
{
"t": "mobile",
"l": "oc",
"w": true,
"p": "",
"tp": "HTSingleView/",
"tdp": "NEIKey.json",
"resOut": "Common/Network/"
}
需求描述:
本地容器需要如何创建 ?返回404
因为现在做的工程是后来才引入nei的,所以直接update生成的新的ftl文件和原来的页面配置有些冲突,每次都需要手动再去改ftl,所以希望针对每个工程能自己配置生成的ftl、js文件么~~
如果在新的nei地址上定义接口,http://nei.netease.com/, 数据还是用原来的老的nei地址数据。 新的该怎么用?
如题,现在只支持HTTP接口的管理,为什么不提供对诸如RPC服务的接口管理呢?
一般而言,对于RPC服务,我们会希望该管理系统提供以下管理:(当然其他的可以再补充)
(1)服务接口
(2)供外部调用的服务名称
(3)接口参数,包括请求参数和相应参数;对于Java来说,就是一个request和response 类,能够管理这两个类包含哪些参数,什么类型。
v0.4.2 生成的模板mock数据文件名都显示为 undefined.json
是配置webRoot吗?为什么我老是访问不到
如题
步骤:
nei build
构建工程Cocoapods 0.39
执行pod install
命令安装第三方库nei mobile
命令更新网络请求代码此时会报错:
/usr/local/lib/node_modules/nei/node_modules/xcode/lib/parser/pbxproj.js:1835
throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);
^
SyntaxError: Expected "/*", "//" or "{" but "<" found.
原因是由于Cocoapods 0.39安装之后,更改了工程文件的格式,但对于部分工程,并不会出现该问题,原因未知;初步推断是Cocoapods 的bug,暂时不需要nei tookit作相应更改。
出错的工程文件见附件.
TestPods.xcodeproj.zip
查看一下 nei.${key}/json/nei-2016-11-02-20-43-42-784.json文件,里面的 path 项末尾会带上一个 "\t"
生成的接口类名如下:{{namePrefix}}{{接口类名}}
例如:NEI 上的接口类名为 CommentRequest,则生成的类型名字 HTCommentRequest, 头文件名为 HTCommentRequest.h, 实现文件名为 HTCommentRequest.m
Request
、Task
, 则自动添加后缀Request
一、我们实际的模板路径跟 nei 生成的不一样
二、多人合作的时候一个人在 nei 中录了一个新的页面,然后他本地在开发没提交代码,另一个人本地 nei update
生成了这个模板,但他不知道这个是不是他需要的,然后就产生了问题
在使用 nei build
命令生成移动端工程
的时候,希望在无法访问 nei (nei 目前还部署在网易内网,外网暂时无法访问)的情况下也可以生成工程,此时不需要生成 Models 和 Requests 文件资源。
/usr/local/lib/node_modules/nei/lib/nei/builder.js:472
if (this.config.jarRoot || this.spec.jarConfig.length > 0) {
^
TypeError: Cannot read property 'length' of undefined
at Builder.buildServerConfig (/usr/local/lib/node_modules/nei/lib/nei/builder.js:472:55)
at new Builder (/usr/local/lib/node_modules/nei/lib/nei/builder.js:77:18)
at loadedHandler (/usr/local/lib/node_modules/nei/main.js:46:13)
at _io.download.ex (/usr/local/lib/node_modules/nei/main.js:178:13)
at IncomingMessage. (/usr/local/lib/node_modules/nei/lib/util/io.js:178:17)
at emitNone (events.js:91:20)
at IncomingMessage.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
请问这个问题是怎么引起的么?
在渲染页面的时候,页面中的模型数据可以从指定的服务器获取,在 server.config.js 中配置 modelServer 参数选项即可:
modelServer: {
host: '',
queries: {},
headers: {},
// path: function (options) {
//
// }
}
参数说明如下:
注意:后端在向目标服务器发送请求的时候,会带上原始请求的 cookie
注意:host 要写完整的地址,比如:
http://192.168.10.25:8080/
,最后的斜杠也需要
当前nei接口管理平台上,可以直接定义数组类型;但是Objective-C中并没有单独的数组类型,需要转换为NSArray;当前是约定不要直接定义数组类型;而是通过Array的方式来定义数组。
后续希望能增加对数组类型的支持,具体如下:
那么在Model和请求中,如果遇到类型StringList
, 那么生成的Objective-C代码应该是
@property (nonatomic, strong) NSArray<NSString *> *dataList;
而不是
@property (nonatomic, strong) StringList *dataList;
规范中的文件可以标识为“模板引擎的辅助函数”,构建工具识别出该文件后,可以通过 vm 模块执行脚本
运行
nei server -k cec47ff7e9d51d1db545f4af92362866 -o ./todoweb
出现报错:
/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/node_modules/serve-static/index.js:40
throw new TypeError('root path required')
^
TypeError: root path required
at Function.serveStatic [as static] (/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/node_modules/serve-static/index.js:40:11)
at Object.Server.init (/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/lib/server/main.js:82:31)
at Object.Server (/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/lib/server/main.js:18:10)
at module.exports (/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/lib/server/server.js:72:18)
at tryStartServer (/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/main.js:103:17)
at Main.server (/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/main.js:125:13)
at Args.options.server (/Users/TEST/.nvm/versions/node/v6.3.0/lib/node_modules/nei/bin/nei.js:43:14)
at emitOne (events.js:96:13)
at Args.emit (events.js:188:7)
请问该怎么解决?
在build.json同目录下执行命令如下:
nei build 11321 -c build.json --productName HTTestPluginDemo --namePrefix HTP --Prefix HTP --CategoryPrefix htp
错误如下:
HTExample/HTTestPluginDemo/HTTestPluginDemo/Network/Requests/HTPRequests.h
/usr/local/lib/node_modules/nei/lib/nei/mobile.oc.pbx.js:25
group.children.forEach((file) => {
^
TypeError: Cannot read property 'children' of undefined
at PbxProj.removeGroupFiles (/usr/local/lib/node_modules/nei/lib/nei/mobile.oc.pbx.js:25:14)
at PbxProj.createPBXGroupByFullPath (/usr/local/lib/node_modules/nei/lib/nei/mobile.oc.pbx.js:145:18)
at PbxProj.update (/usr/local/lib/node_modules/nei/lib/nei/mobile.oc.pbx.js:240:18)
at MobileOCBuilder.modelStart (/usr/local/lib/node_modules/nei/lib/nei/mobile.oc.js:399:25)
at MobileOCBuilder.buildStart (/usr/local/lib/node_modules/nei/lib/nei/mobile.oc.js:427:26)
at MobileOCBuilder.start (/usr/local/lib/node_modules/nei/lib/nei/builder.js:519:14)
at MobileOCBuilder.build (/usr/local/lib/node_modules/nei/lib/nei/mobile.js:196:19)
at loadData (/usr/local/lib/node_modules/nei/main.js:124:28)
at _io.download (/usr/local/lib/node_modules/nei/main.js:37:17)
at IncomingMessage.<anonymous> (/usr/local/lib/node_modules/nei/lib/util/io.js:176:17)
mock/xx/jtr.js 如下:
/* 异步接口mock数据路径 */
mockApi: '/Users/mejustme/Desktop/workspace/edu-front-2.0/mock/views/'。
`路径最后应该为:` xxxx/api/
后端不能接收到文件流
从 v0.3.8 开始,在使用 nei build
命令构建 WEB 工程时,可以使用 --bower
参数自动安装 bower 依赖。
注意: windows 下面貌似会报权限错误:
events.js:141 throw er; // Unhandled 'error' event ^ Error: spawn bower ENOENT at exports._errnoException (util.js:874:11 at Process.ChildProcess._handle.onexit (in at onErrorNT (internal/child_process.js:34 at doNTCallback2 (node.js:439:9) at process._tickCallback (node.js:353:17)所以还是需要手动安装
update 指令的逻辑再 check 一下,现在发现已经被删除的一个 css 文件不会重新生成
重现步骤:
nei build -k xxxxxx
删除static目录
运行 nei update -w
static 下面的 common 目录下的 base.css 不会重新生成,其他文件可以
和 nei 配套使用的本地模拟容器 Puer 功能虽然强大,但依赖的包较多,安装时经常会失败。
为此,nei 计划推出一个轻量级的本地模拟容器,集成在 nei 工具中,通过 nei server
命令启动,满足 nei 的需求即可。
请大家拭目以待。
iOS客户端代码Request生成规则需要作如下调整:
#import "NSObject+HTModel.h"
, 现需更改为#import "HTNetworking.h"
responseMapping 方法返回:[{{namePrefix}}{{自定义类型名}} defaultResponseMapping]
更改为 responseMapping 方法返回:[{{namePrefix}}{{自定义类型名}} ht_modelMapping]
修改原因:
HTNetworking.h
以引入其他头文件;自动生成的代码尽量直接包含该头文件;注意事项:
由于HTNetworking
头文件路径的修改不会对老版本生效,因此上述规则的修改应当仅应用于新版本的构建工具,保证老版本的构建工具生成的代码仍然可使用老版本的网络库.
在模板文件中添加一个可执行的脚本文件,例如CopyMockFiles.sh; 利用nei build命令生成工程后,该文件的可执行属性丢失,执行脚本会报错 "Permission denied".
之前的文件属性为“-rwxrwxrwx”; 生成后的文件属性为"-rw-r--r--"
期望: 可执行的脚本文件在工程生成工程中,可执行属性不丢失,这样可以在工程模板中添加执行脚本的步骤。
当前nei构建mobile工程时,待替换的key值在NEIKey.json中给出。现在应用开发人员反馈希望该信息可以通过命令行命令直接输入而不希望每次去修改NEIKey.json文件.
利用nei构建mobile工程时,有一个可选项,配置是否将模板文件夹下的文件添加到Xcode工程即.xcodeproj文件中;
原有逻辑如下:
但实际情况中,一般不需要“将模板文件夹下的文件添加到Xcode工程中;”,这样每次都要加--resOnly参数变得难以理解;
因此,希望将处理逻辑变更如下:
接口测试->接口列表 不能滚动 导致很多接口看不到了
当前nei接口管理平台对于枚举类型都当作字符串来处理,iOS客户端使用起来没有那么方便;但是由于Objective-C的枚举NSEnum无法描述字符串,所以希望接口描述里面可以有办法区分是字符串还是整型。对于字符串,仍然按照原有规则生成;对于整型,后续期待可以生成类似如下的代码:
typedef NS_ENUM(NSInteger, {{namePrefix}}{{类型名}}) {
{{namePrefix}}{{类型名}}{{枚举的 key1}} = {{枚举的 key1 的值}}, // {{枚举的key1的描述}}
{{namePrefix}}{{类型名}}{{枚举的 key2}} = {{枚举的 key2 的值}}, // {{枚举的key2的描述}}
{{namePrefix}}{{类型名}}{{枚举的 key3}} = {{枚举的 key3 的值}}, // {{枚举的key3的描述}}
};
安装nei-tooket一切正常,接着安装ht-templates报错:
Cloning into '/Applications/Android Studio.app/Contents/plugins/android/lib/templates/activities/HTTemplate'...
fatal: unable to access 'https://g.hz.netease.com/hearttouch-android/ht-template.git/': Failed to connect to g.hz.netease.com port 443: Operation timed out
ls: /Applications/Android Studio.app/Contents/plugins/android/lib/templates/activities/HTTemplate: No such file or directory
ping https://g.hz.netease.com没问题
环境:
OS X, 10.12.3
Android Studio 2.3
Build #AI-162.3764568, built on February 24, 2017
JRE: 1.8.0_112-release-b06 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
当前nei构建工程时,对于文件前缀存在三个参数进行描述:
build.json
中通过参数--namePrefix
指定的网络请求前缀;如果不指定,默认为HT;NEIKey.json
中指定的模板替换规则"Prefix":"XYZ"
会将工程模板中的{{Prefix}}
替换成为指定的字符串NEIKey.json
中指定的模板替换规则"CategoryPrefix":"xyz"
会将工程模板中的{{CategoryPrefix}}
替换成为指定的字符串。使用者在构建自己的工程时,需要指定以上三个参数才可以正确生成自己想要的工程,不便于使用;因此希望toolkit改进如下:
NEIKey.json
中不再需要指定Prefix
或者CategoryPrefix
;NEIKey.json
中指定了Prefix
或者CategoryPrefix
, 一概忽略;--namePrefix
传递的参数默认替换掉{{Prefix}}
, 并且以小写形式替换掉{{CategoryPrefix}}
; 则用户只需要传递一个参数.--namePrefix
参数,直接报错,不继续执行。nei mobile
命令如果没有传递--namePrefix
参数,也直接报错,不继续执行;即不再提供默认的HT
前缀;参数名可以保持为namePrefix
, 也可以统一替换为prefix
或者Prefix
例如:
--namePrefix HTE
, 则使用HTE
替换掉模板文件中的{{Prefix}}
, 使用hte
替换掉模板文件中的{{CategoryPrefix}}
.
定义接口的时候是 /j/coursedesign/getChapters.json
生成的 mock 数据文件是 getChaptersjson.json
jtr 配置失效
nei build 指定--webroot --viewroot 为nei -p 不同盘符下的路径时,生成的jtr.js中 webroot、viewroot、mockTpl、mockApi 使用相对路径寻址错误。
例如:
生成后的jtr.json文件中目录解析错误如下:
/* 根目录 */
webRoot: path.join(__dirname, 'D:/neteasecode/nyx/nyx-web/src/main/webapp/'),
/* 视图目录 */
viewRoot: path.join(__dirname, 'D:/neteasecode/nyx/nyx-web/src/main/webapp/WEB-INF/ftl/h5/'),
/* 同步模块mock数据路径 */
mockTpl: path.join(__dirname, '/D:/neteasecode/nyx/nyx-web/src/main/webapp/WEB-INF/ftl/h5/mock/'),
/* 异步接口mock数据路径 */
mockApi: path.join(__dirname, '/D:/neteasecode/nyx/nyx-web/src/main/webapp/src/mock/')
使用nei server命令启动测试服务器,访问页面地址报错如下:
访问了 ----> GET /product/list
Failed to lookup view "./booking/productlist.ftl" in views directory "C:\Users\h
zwenjinlu\nei.11934\D:\neteasecode\nyx\nyx-web\src\main\webapp\WEB-INF\ftl\h5"
若切换工作目录,执行相同命令后
生成后的jtr.json文件中目录解析如下:
/* 根目录 */
webRoot: path.join(__dirname, '../../neteasecode/nyx/nyx-web/src/main/webapp/'),
/* 视图目录 */
viewRoot: path.join(__dirname, '../../neteasecode/nyx/nyx-web/src/main/webapp/WEB-INF/ftl/h5/'),
/* 同步模块mock数据路径 */
mockTpl: path.join(__dirname, '/../../neteasecode/nyx/nyx-web/src/main/webapp/WEB-INF/ftl/h5/mock/'),
/* 异步接口mock数据路径 */
mockApi: path.join(__dirname, '/../../neteasecode/nyx/nyx-web/src/main/webapp/src/mock/'),
再次命令 nei server 启动访问同样的页面地址打开正常。
检查代码lib/nei/webapp.js 中方法buildServerConfig ,计算webRoot 等目录值时取的是相对项目目录的相对路径。所以,建议:
NEI团队要汇报上半年的工作了,求赞美,求批评,大家的反馈是我们团队前进的动力,谢谢各位先。
大家的反馈对NEI产品本身的走向有非常大的影响哦,有什么想说的话,尽管给我们团队留言吧。
反馈格式如下(有不方便透露的信息空着即可):
你们的公司及行业:
你们的产品是什么:
你的角色是(前端、后端等):
你们是通过什么渠道知道NEI的:
你们主要在使用NEI的什么功能:
你们还希望NEI提供什么样的功能:
使用了NEI后对你们的开发效率有多大提升:
其他想对NEI产品团队说的话(赞美和批评等):
如题^_^
希望解决string不允许为null的测试逻辑。
并且系统提供自定义登录处理
提示
extname 方法需要传入字符串类型的值
如题 这样方便很多 另外如果能判断一下参数中有文件类型 自动增加相应请求体 很多人都会忘记
当前build.json文件为
{
"t": "mobile",
"l": "oc",
"w": true,
"p": "../Stone",
"tp": "./HTTemplate",
"resOut": "Stone/Network/",
"tdp": "./NEIKey.json"
}
而Stone
实际上可以替换为一个命令行传递的参数ProductName, 这个ProductName也可以用于NEIKey.json中的模板化过程,这样,使用同样的模板文件夹生成新的工程时,不需要去修改build.json文件,可以简化使用。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.