私信发送成功
Watch Star Fork

linder / PhalApi

forked from 暗夜在火星 / PhalApi 
PHP轻量级的后台接口开发框架,专注于后台接口的快速开发。在移动互联网时代的这十年,希望此框架能对各接口开发有实际的帮助,欢迎使用!我们致力于将PhalApi维护成像恒星一样:不断更新,保持生气;为接口负责,为开源负责!让后台接口开发更简单! http://www.phalapi.net/
克隆/下载

将从 href="献者 于nt'> && ! lloedgit'>SSH > ='item'>
新夹标签' type='text'> /b> 列表 t'>SSH
/b示:m:norong> 由于ace( 栔Im'>新夾午tem'>新夹会俈m的 .keep > 搜索/div>
itle'> 挂件 elds'>
将从 href="献者 icosownl "_blank"Status,s"wStatus,s v>
text'>
text'> itle'> 挂件 elds'>
将从 href="献者 icosownl "_blank"bu sql017th accept">bu sql017th accept v>
text'>
text'> itle'> 挂件 elds'>
将从 href="献者 icosownl "_blank"@proj lloed">分析 icosownl "_blank"@proj lloed">@makai 分析 icosownl "_blank"@proj lloed"> lloedgit'>SSH v>
text'>
text'> itle'> 挂件 elds'>
将从 href="献者 icosownl "_blank"bug clas">bug clasgit'>SSH text'> text'> itle'> 挂件 elds'>
将从 href="献者 icosownl "_blank"llo exllo exSSH v>
text'>
text'> itle'> PhalApi elds'>
将从 href="献者 icosownl "_blank"&& ! lloed">&& ! lloedgit'>SSH v>
text'>
text'> itle'> PhalApi elds'>
将从 href="献者 icosownl "_blank"inef=='ui g clas">inef=='ui g clasgit'>SSH v>
text'>
text'> itle'> PhalApi elds'>
将从 href="献者 icosownl "_blank"Run/jqu nt pla">Run/jqu nt plagit'>SSH v>
text'>
text'> itle'> PhalApi elds'>
将从 href="献者 icosownl "_blank"> ico/ass garype=>> ico/ass garypegit'>SSH v>
text'>
text'> itle'> PhalApi elds'>
将从 href="献者 icosownl "_blank"docs upe> hcs upgit'>SSH v>
text'>
text'> on =entorugit'>SSH elds'>
将从 href="献者 icosownl "_blank"> ico/ass garype=>> ico/ass garypegit'>SSH v>
text'>
text'> README.mdgit'>SSH elds'>
将从 href="献者 icosownl "_blank"phpuni='dests d'>actorw noand $('#git upass=re>phpuni='dests d'>actorw noand $('#git upass=rgit'>SSH v>
text'>
text'> p'.b".jsink>> p'.b".jsingit'>SSH elds'>
将从 href="献者 icosownl "_blank"GPL">GPLgit'>SSH p'.b".jsinl2'> v>
p'.b".jsinl2'>text'>
text'> logo.jpggit'>SSH elds'>
将从 href="献者 icosownl "_blank"llo logo">llo logogit'>SSH v>
text'>
text'>> text'>> text'>
README.mdon'ss='>7.63 KBss='> 献者 <> p>#inzaida - PHP轻量级开源接口框架 - V>masterp> >p># <_way://www.pnzaapi.osc">官网 - www.pnzaapi.oscgit' >ef=" >p>###inzaida是一个PHP轻量级开源接口框架丛的是让接口开发更简单。 rp> > 此框架代码开源、产品开源、思想开源协用于个人、商业用途等页放心使用。 如有问题协联系我们(Emade:chanzonghuang@gmade://g QQ:376741929 QQ交流群:421032344 )或在Git@OSC上h itemissue。 rpre><> p>在此借一行文字的空间感谢 开源中国<:norong> 这么好的分享平台卐时也感谢您花费宝贵的时间来阅读此文档卜开源的路上您每一次真心的关注和肯定都是我们前进的最大尊!谢谢! rp> >p>#背景 过去十年是互联网时代如今的十年是移时代。 rp> >p>在iOS、Android、W s Phisp、PC版、Web版等各种终端和各种垂直应用不停更h i迭代的大背景下显然很是需要一组乃至一系列稳:后台接口支撑。 接口是如此重要正如Jaroslav Tinich在《软件框架设计的艺术》一书中说的: rp> > API就如恒星一旦出现便与我们永恒共sc'。 rpre><> p>所喰顿里希望通过/b>一个快速用后台接口开发框架䍏喰 rp> > 一喰支撑轻量级项后台接口快速发 二喰阐明如何进行接口开发、设计和维护以很好海量访问、大数据、向前向后兼容等 三喰顺便分享一些好的思想、技巧和有用工具、最佳践。 rpre><> p>如果您有接口项开发需要䍏刚好需要一个PHP接口框架欢迎使用!show我们也争but致于将我们inzaida维护成像恒星一样 rp> > 不断更h i保4气为接口负责为开源负责 rpre><> p>#安装 rp> >ulPhalApi"Pasko-act"> >li>从pi/tree='搜紋but稳:代码 >li>推荐在Linux服务器上进行开发 >li>tem议PHP >= 5mas3 >/ula >p>将代码d'> > _way:// winlhostlinzaida/iublic/inef=='/ rpre><> p>>ef=" >p>为页是否安装成功䍏塮问默认接口服务䍦 gned'> <_way:// winlhostlinzaida/iublic/demo/">_way:// winlhostlinzaida/iublic/demo/git' 正常时会返回类 rp> > { show"rsc": 200, show"e='s": { showshow"donat": "Default le=", showshow"c mas0", showshow"/jqu : 1422779027 show}, show"jec=: "" } rpre><> p>#在线体 rp> > //默认的接口服务 _way://demo.pnzaapi.osc/ //带参数的示例接口 _way://demo.pnzaapi.osc/?service=Default.Io-no&userLs4D4git@git //故意求一个非法的服务 _way://demo.pnzaapi.osc/?service=Demo.Nisp { show"rsc": 400, show"e='s": [], show"jec=: "非法求服务Demo.Nisp不存在" } rpre><> p>#文档 >gned'> <_way://www.pnzaapi.osc/wikis/">_way://www.pnzaapi.osc/wikis/PhalApp> >p>#类考手 >gned'> <_way://www.pnzaapi.osc/ hcs/">_way://www.pnzaapi.osc/ hcs/PhalApp> >p>#[酷]接口参数在线查询 onfirm方便客户端查看最h i的接口参数三别/b>此在线工具根据接口代码实时俈接口参数报表完全不需要后台开发写维护额外的文档。我觉得顿很符合敏捷开发之道。 rp> > //接口参数在线查询工具链接 _way://demo.pnzaapi.osc/demo/checkidaParams.pnp rpre><> p> gned'> <_way://demo.pnzaapi.osc/demo/checkidaParams.pnp">_way://demo.pnzaapi.osc/demo/checkidaParams.pnpgit' 塮问效果如下App> >p>>ef=" 因此接口所需要参数对于接口开发人员也只是简单配置一下参数规则便塽松t.text。 rp> >p>#[赞]接口单元测试 on录被测试代码不是好代码。 rp> >p>在使用此框架进行接口开发时我们强烈tem议使用测试驱尼发以便于不断积累形接口测试体系保接口向前向后兼容。 br> 例如接口 /?service=U.b".GetBreeInfo&userId=1<:norong> 进行单元测试时按 构造-操作-检(BUILD-OPERATE-CHECK)模式<:norong> 即 rp> > show/** show * @group'destGetBreeInfo show */ showpublicn(){ fdestGetBreeInfo() show{ showshow//Step 1. 构tem求URL showshow$norHomeservice=U.b".GetBreeInfo&userId=1'; showshow//Step 2. 执行求模拟接口求 showshow$rsHominzaida_Helper_TestRunner::go($url); showshow//Step 3. 页 showshow$}).c->> >p>对于框架的核心代码我们也一直坚=单元测试其核心框架代码的单元测试覆盖率高达96%以上。 rp> >p>#[项]基于接口查询语言的SDK包 可用一句话来描述接口求䍦JAVA的求示例 rp> > inzaidaClietaResponse"semponse"ominzaidaClieta.c='pte() showwww.17thHost(<_way://demo.pnzaapi.osc/") showwww.17thService("Default.Io-no") //接口服务 showwww.17thParams("userLs4D",w"ehref="/) //接口参数 showwww.17thTjquout(3000) //接口超时 showwww.request(); rpre><> p>前已/b>的SDK有 rp> >ulPhalApi"Pasko-act"> >li>JAVA版 >li>Ob'gitive-c版 >li>PHP版 >li>C#版 >li>JS版 >/ula >p>#主要录结构 rp> > . │ ├──minzaida //inzaida框架䍐期整包升级 │ │ ├──miublicn //对外问录em议隐藏PHP实现 │ └──mdemo //Demo服务问入口 │ │ ├──mC} wn //项接口公共配置主要有app.pnp, sys.pnp, dbs.pnp ├──mD='s //项接口公共数据 ├──mLangud=" //项接口公共翻译 ├──mRun/jqu //项接口运行 搜缛录用于存放日记䍏软链到别的区 │ │ └──mDemo //应用接口服务䍐称自ext䍏多组 show├──mida //接口响应层 show├──mDomain //接口领域层 show├──mModll //接口久层 show└──mTests //接口单元测试 rpre><> p>以下onfi示例录结构图解 >ef=" >p>#加入我们 显然顿只是一个开始我们要走的路还很长。这些也不是一个人可完。即使喰也需要很长一段时间。 rp> >p>在一个人还年的时候我觉得就应该手致做一些对社䰚有意义事情因此我选择了开源。 br> 如果够有机䰚和你一起onfi努,将䰚是我的荣幸也是一段令值得兴奋激弚。SO?如果你此深感兴趣、有激情和时间页联系我邮箱一如既往是 gned'> chanzonghuang@gmade://ggit'或者开源中国站内留言欢迎加入顰谢! rp> >p>除此it你也通过其他的方式来支我们。一如在你使用此框架进行实际项开发过程on所遇到问题或者更好的解决方案可反馈给我们又如关注和认可因为在开源的路上您每一次真心的关注和肯定都是我们前进的最大尊!谢谢! rp> >p>#更h i日记 此 >gned'> <_way://www.pnzaapi.osc/wikis/%5B5.6%5D-%E6%9B%B4%E6%96%B0%E6%97%A5%E8%AE%B0.html">更h i日记git' 主要是firm说明我们一直在努更h i和维护。 rp> text'> ext/ja> if($('.markproj-bodel).t@gldren("n-edi").length != 0){ var i, array"om$('.markproj-bodel).t@gldren("n-edi"); array.first().attr('scoped',''); $.scoped(); } xt/ja> >
Home#pro'git-donpte-overview'; $('a[ed'> <' + ed'>H+ '"]l).tlick((){ () { $root.animpte({ extollTop: $(ed'>).offset().top }, 500, (){ () { "seturn w . win .hashHomed'>; }); seturn false; }); pd="Hom-1; isLct-w nHomfalse; $-act"om$('.pro'git-donpte--actl); $modal"om$('.pro'git-donpte-modall); $c 0) { $btnLct-"om$c ', cla.donptor_on r, '将从 ¥', cla.money, '献者 < ', cla.messd=", ' < ('error')) { $messd=".removeCe'> ('wari').etml(" 提示:<:norong> 由于 Giti不支空 搜夾创建 搜夹后会俈空的 .keep 搜"); $(}).c).pareot().removeCe'> ('error'); } }) m$c='pteFt plaForm.sform'(f){ (e) { var ='tex"om$nt plaPath.='t(); if (!nt plaRen.dest(='tex)H&& !checkFt pla(='tex)H&& ='tex)H{ $('#epai/rtt_); ).='t(='tex"+ '/.keep'); } else { $messd=".addCe'> ('wari').etml(" 搜夹名不为空不含有字符(/)且on录与当前录 搜夹䍐"); $nt plaPath.pareot().addCe'> ('error'); e.preveotDefault(); } }) m$('#c='pteont plal).tlick(c='pteFt plaShow); w .c='pteFt plaShow =fc='pteFt plaShow; w .hasThalC '); var $menu om$(c ({ left:ix, top: y }); $menu.find('.btn-open-new-tab').attr({ ed'>: path, tar="t:i'_blank' }); $menu.find('.btn-reon rs).on('tlick', (){ (eveot) { seon r($ cla. areot().attr('urtt_hex')); }); $menu.find('.btn-deletrs).on('tlick', (){ (eveot) { semoveFrtt($ cla. areot().next().find('.ui.ass=').attr('); ).replpce(/\+/g, '%20')); }) } var editw nHomfalse m$(ehcuding).on('tlick',(){ (eveot){ if (hasThalC Home/' + g .user_pro'git; i} else { w . win .hd'>Homw . win .pathon r; i} } }); } m(){ seon r(urtt_hex) { $(".r .Phal- cla").show(); $(".Phal- cla-reon r").hide(); if($("."+urtt_hex).i (':hidden') ==mtrue) seturn; $("."+urtt_hex).hide(); var _t"om$(".reon r-"+urtt_hex); src"om_t.attr('src_mext-) if( (" style=",""); } msetTjquout((){ (){ $(". bs=' $('#").tlick((){ (){ form"om$(}).c).pareot (".ui.ass=") urtt_hex"om$(}).c).pareot (".r .Phal- cla").attr("urtt_hex"); epai/atton r"om$.Phim(ass=.find("[Ls4D4'epai/atton rs]").='t()) overwrite"omfalse $('.Phal- cla-proj-on r').find('a').each((){ (a){ donat"om$(}).c).attr('donate); iif(donat"!= undefined){ f (donat.split('a')[0].toLowerCase() ==mepai/atton r.toLowerCase()){ overwrite"omtrue; } } }); iif(overwrite){ ass=.find("[Ls4D4'epai/atton rs]").focus(); al('t("存在相的文名,修改后重试") seturn; } $.ajax({ e.co:i'POST', url: Homw . win .hd'>.split('?')[0] w . win .hd'>Homed'>; }else { al('t("重命名失败!"); } }, e='sT.co:i"jsink }); }) m $(". bs=' d('.b").tlick((){ (){ $(".r .Phal- cla").show(); $(".Phal- cla-reon r").hide(); }) $('.Phal- cla-proj-on r').each((){ (){ var $}).c"om$(}).c); iif (d.coof $}).c. areot().attr('urtt_hex') === 'undefined') { seturn; } $}).c.> ieot'> fnput'>but"> ieot_); "lLs4D4"> ieot_); "le.com"hidden"e='text"" />>
ieot n'> h3ibuttpro'git_> i_donatect-itle'> n ico项点评 (将从 uta">0 r者) h3a> e-edi> .ui.et ieot .et ieot.note .notl-> ext/ja> ((){ () { var $btnLct-pi$c ieot pi$c ieot n); m$c ieot om$c (' stabled'); i } seturn notlAnchorLwin er.set='(); } } }); }; mcheckLct-Homf){ () { var -actTop, top; topHom$(w ).extollTop(); -actTopHom$c = topH&& -actTopH< topH+m$(w ).he flu()) { $(w ).off('sctoll', checkLct-); seturn ect-C ieot (); } }; $btnLct-.on('tlick', ect-C ieot ); ect-C ieot (); }).c.notlAnchorLwin er.ss=t({ e'>tAnchorElm:me#pro'git_> i_donate }); }).tall(}).c); xt/ja> > > ieot-box'ibutt> ieot-box'>'>p> 你在 登录git'后对此项发表评论 rp> > > ext/ja> ((){ () { $((){ () { seturn Thal.ss=t(); }); }).tall(}).c); xt/ja> text'> e-edi> .team-member->heckbox .ui.rt-wo.>heckbox.>heckedclabll:af er{top:7px !important} -edi> > ext/ja> Thal.ss=tH fll fluTheme('wh cl') xt/ja> ext/ja> $((){ () { GitLab.GfmAutoC pletr.e='sSourc"Hom
'>p>>gned'> <_ways://on'al.c /" tar="t="_blank">© Gital.c PhalApp>'>
'>
>
i 使用条款git'>SSH
elds'> i <_way://on'.mydoc.io" 帮助文档git'>SSH elds'> i OpenAPIgit'>SSH SH elds'> '>
>
i APP与插件d'>SSH elds'> i 合作伙伴git'>SSH SH elds'> '>
>
i <_ways://on'al.c /on' osc/" 更h i日志git'>SSH elds'> i 意与em议git'>SSH SH SH elds'> piv> '>ef="alx" Qrcodl-weixin" SH elds'> '>
>
i400-898-2008 转2>SSH elds'> ion'#git@git.cn(请将#替换@)>SSH elds'> i >es'> 三群:655903986献者 <>a> <_way://weibo://gi-1yunOSCtaogstar"confo bs=' "_ar="t="_blank""_blank"关注码d微博">>es'> n icon'>码dGital献者 <>a> SH SH SH elds'>
<_ways://www.anchnet.c /" tar="t="_blank""_blank"lnchnet href="alx" 51idc" git' /b>> SH elds'> i <_way://www.miitbeian.gov.cn/">粤ICP备12009483号-8git'>深圳市奥思网络科技有限公司版权所有> SH es'> 简 体 <>a>/onrumb'> 繁 體 <>a>/onrumb'> ; forc"_mobrtt_urlHomcurreot_url.sfostr(0,curreot_url.io-noOf('?'))+'?forc"_mobrtt=true'; ecin .hd'>Homforc"_mobrtt_url; } ((){ () { // 更h i底栏位置当页面内容高度小于窗口高度时䰚将底栏浮尮位在窗口底端 f){ updpteFtocodPosi () { var pd="He fluHomehcuding.bode.offsetHe flu; if ($foocod.hasCe'> ('fixed-bobasm')) { pd="He fluH+om$ntocod.oucodHe flu(); if (pd="He fluH>m$(w ).he flu()) { m$ntocod.removeCe'> ('fixed-bobasm'); } } else { if (pd="He fluH ('fixed-bobasm'); } } } var $foocodlom$('#on' foocod-mpinl); $(ehcuding).on('ntpay', updpteFtocodPosi ); $(w ).on({ 'sctoll': updpteFtocodPosi , 'ntsize': updpteFtocodPosi }); // 每隔一段时间检测页面高度变t确-des栏在页面最底端 setIoter='t(updpteFtocodPosi , 500); })(); $('.confo bs='t). bs='({ posi : 'bobasmleeqcod' }); xt/ja> es'> elds'>
SH elds'> '>gnv> weixin sgit qq qzispgit'>SSH
ieot'> fns'> ieot'>n iconSH elds'> fns'> n iconSH SH ext/ja> ((){ () { var $gotoppi$rootpi$toolbar, updpte; $root"om$('bodepietml'); $toolbar"om$('.sixt-toolbarl); $gotopHom$('#ootop'). bs='({ posi : 'leftleeqcod' }).on('tlick', (){ () { seturn $root.animpte({ extollTop: 0 }, 500); }); updpteHomf){ () { f ($(w ).extollTop()H>m50) { seturn $ootop.addCe'> ('dClass'); } else { seturn $ootop.removeCe'> ('dClass'); } }; $(w ).on('sctoll', updpte); updpte(); $toolbar.find('.sharesownl'). bs='({ nl='u: true, hoverable: true, posi : 'leftleeqcod', dele=' { hide: 500 } }); }).tall(}).c); xt/ja> ext/ja> ((){ () { var $> ieotpi$root; $root"om$('bodepietml'); $> ieotHom$('#home-> ieot'). bs='({ posi : 'leftleeqcod' }); $> ieot.on('tlick', (){ () { var c ieotpihd'>, offsetTop; f ($('#pro'git_> i_donate).length === 0) { hd'>Home/ href="/linzaida#pro'git_> i_donate; w . win .hd'>Homed'>; seturn; } > ieotHom$('.et ieot.note')[0]; f (et ieot) { offsetTop om$(c mding).offset().top - 80; seturn $root.animpte({ extollTop: offsetTop }, 400); } else { offsetTop om$('#editor_> ieot').offset().top + 30; $root.animpte({ extollTop: offsetTop }, 400); seturn $('#editor_> ieot').focus(); } }); }).tall(}).c); xt/ja> ext/ja> w ._bd_share_clasig={nnt iit":{"bdSnsKey":{},"bdText":"分享到h i浪微博","bdMini":"1","bdMiniLact":["bdxc","tqf","douban","bdhome","sqq","thx","ibf="u","meiowchuo","mogujie","diandian","huaban","duitang","hx","fx","youdao","sdo","qingbiji","people","xinhua", ext/ja >> e-edi> .float-left-box{ style='disp;posi :fixed;left:0;bobasm:0;z-io-no:99}.float-left-box .d('.b-left{posi :absoluco;top:50px;left:30px;cursor:poiqcod} -edi>
i '/on'al-ef="s/3?from=on'al' tar="t='_blank'>'>ef="alx" 3_uloat_left_people"aogstar"uloat-people"a'>ef="alx" 3_uloat_left_d('.b"aogstar"d('.b-left"a'>it'>SSH ext/ja> var -eftPeopleHom$('.uloat-left-boxs) f ($.etokie('visi -on'al-ef="s-wjj') ==m1) { -eftPeople.hide() } else { -eftPeople.show() } $('.e('.b-lefts).on('tlick', (){ (e) { e.preveotDefault() $.etokie('visi -on'al-ef="s-wjj', 1, { pdth: '/', expints: 30}) -eftPeople.hide() }) xt/ja> > ext/ja> ((){ () { }).c.__gac"om{ domain: 'www.git@git.osc' }; }).tall(}).c); xt/ja> ext/ja defera >SSetml>