├── .gitignore ├── README.md ├── SUMMARY.md ├── ch-1-yu-jian-phalapi.md ├── ch-10-open-source.md ├── ch-2-ji-chu-ru-men.md ├── ch-3-gao-ji-zhu-ti.md ├── ch-4-not-only-coding.md ├── ch-5-new-project.md ├── ch-6-chong-xue.md ├── ch-7-perfect-project.md ├── ch-8-what-is-phalapi.md ├── ch-9-how-to-desgin-api.md ├── chapter1.md ├── chapter2.md ├── chapter3.md ├── images ├── ch-1-api-install.png ├── ch-1-demo-default-api.png ├── ch-1-installation.png ├── ch-1-pic-1.png ├── ch-1-shop-default-api.png ├── ch-1-shop-project.png ├── ch-1-shop-welcome.png ├── ch-1-welcome.png ├── ch-10-md-html.jpg ├── ch-10-stars.jpg ├── ch-2-api-domain-model-call.png ├── ch-2-co-ho-hco.png ├── ch-2-compare-data.png ├── ch-2-goods-snapshot-docs-exception.png ├── ch-2-goods-snapshot-docs.png ├── ch-2-hua-xue-fang-cheng-si-like.png ├── ch-2-logger-interface.png ├── ch-2-micro-service.jpg ├── ch-2-model-proxy-full.jpg ├── ch-2-model-proxy-lite.jpg ├── ch-2-multi-cache.jpg ├── ch-2-ret-happen.jpg ├── ch-2-xiang-xian.png ├── ch-3-buildapp.png ├── ch-3-buildsql.png ├── ch-3-buildtest.png ├── ch-3-check-goods-snapshot.png ├── ch-3-java-sdk.jpg ├── ch-3-list-all-apis-welcome-say.png ├── ch-3-list-all-apis.png ├── ch-3-pear-map.png ├── ch-3-phalapi-buildcode.jpg ├── ch-3-qiniu-cdn.jpg ├── ch-3-stock-go.jpg ├── ch-3-task-1.jpg ├── ch-3-task-2.jpg ├── ch-3-task-3.jpg ├── ch-3-task-4.jpg ├── ch-3-task-5.jpg ├── ch-3-uml-di.jpg ├── ch-3-wechat-red-pack.jpg ├── ch-3-wechat-uml.jpg ├── ch-4-comment-get-id-1.jpg ├── ch-4-comment-get-online-doc.jpg ├── ch-4-phalapi-coverage-html.jpg ├── ch-4-refactoring-pattern-tdd.png ├── ch-4-tdd-purpose.jpg ├── ch-4-tree-decision.jpg ├── ch-5-adm-space.jpg ├── ch-5-android-user-center.png ├── ch-5-coverage-event.jpg ├── ch-5-coverage-line.jpg ├── ch-5-db-er.png ├── ch-5-ios-p1.jpg ├── ch-5-ios-user-center.jpg ├── ch-5-list-apis-fun.jpg ├── ch-5-manager-event-post.jpg ├── ch-5-manager-user.jpg ├── ch-5-wetime-func.jpg ├── ch-6-api.v2.family.com_1_50_with_cache.png ├── ch-6-api.v2.family.com_1_50_without_cache.png ├── ch-6-apis-list-manual.png ├── ch-6-app-start-up.jpg ├── ch-6-group-join.jpg ├── ch-6-hui-dian.png ├── ch-6-person-draw.png ├── ch-6-run-tests.jpg ├── ch-6-weight.png ├── ch-6-xhprof-callgraph-pdo.jpg ├── ch-6-xhprof-callgraph.jpg ├── ch-6-xhprof-no-cache.jpg ├── ch-7-user-login.jpg ├── ch-8-ab.png ├── ch-8-cva.jpg ├── ch-8-instability-abstract.png ├── ch-8-phpmetrics-old.jpg ├── ch-8-phpmetrics.jpg ├── ch-8-phpunit.jpg ├── ch-8-sonar.jpg ├── ch-8-uml-class-relation.jpg ├── ch-8-workflow.jpg ├── ch-8-xhprof.png ├── ch-9-lavarel.jpg ├── ch-9-phpunit-comparator.jpg ├── ch-9-phpunit-exception.jpg ├── ch-9-phpunit.jpg └── feed_week_recipe.jpg ├── index.md ├── introduction.md ├── src ├── Family-2.0 │ ├── .gitattributes │ ├── .gitignore │ ├── Apps │ │ ├── Fami │ │ │ ├── Api │ │ │ │ ├── Default.php │ │ │ │ ├── Group.php │ │ │ │ └── Group │ │ │ │ │ └── Member.php │ │ │ ├── Common │ │ │ │ └── Def.php │ │ │ ├── Domain │ │ │ │ ├── Feed │ │ │ │ │ └── Comment.php │ │ │ │ ├── Group.php │ │ │ │ └── Group │ │ │ │ │ └── Member.php │ │ │ ├── Model │ │ │ │ ├── FeedComments.php │ │ │ │ ├── Group.php │ │ │ │ └── GroupMember.php │ │ │ └── Tests │ │ │ │ ├── Api │ │ │ │ ├── Api_Default_Test.php │ │ │ │ └── Group │ │ │ │ │ └── Api_Group_Member_Test.php │ │ │ │ ├── phpunit.xml │ │ │ │ └── test_env.php │ │ ├── Scale │ │ │ ├── Api │ │ │ │ ├── Default.php │ │ │ │ ├── Device │ │ │ │ │ └── Scale.php │ │ │ │ └── Nutrition │ │ │ │ │ └── SWeek.php │ │ │ ├── Domain │ │ │ │ ├── SPush │ │ │ │ │ ├── SpecialSceneWelcome.php │ │ │ │ │ └── Week.php │ │ │ │ └── SPushBase.php │ │ │ └── Tests │ │ │ │ ├── Api │ │ │ │ └── Api_Default_Test.php │ │ │ │ ├── Domain │ │ │ │ └── Domain_SPush_Week_Test.php │ │ │ │ ├── phpunit.xml │ │ │ │ └── test_env.php │ │ └── Task │ │ │ ├── Api │ │ │ └── Default.php │ │ │ ├── TMyTrigger │ │ │ ├── PushBase.php │ │ │ └── WeekPush.php │ │ │ └── Tests │ │ │ ├── Api │ │ │ └── Api_Default_Test.php │ │ │ ├── phpunit.xml │ │ │ └── test_env.php │ ├── Config │ │ ├── app.php │ │ ├── dbs.php │ │ └── sys.php │ ├── Data │ │ ├── feed_comments.sql │ │ ├── group.sql │ │ ├── phalapi_test.sql │ │ ├── sweight.sql │ │ └── user.sql │ ├── Demo │ │ ├── Api │ │ │ ├── Default.php │ │ │ └── User.php │ │ ├── Domain │ │ │ └── User.php │ │ ├── Model │ │ │ └── User.php │ │ ├── ModelProxy │ │ │ └── UserBaseInfo.php │ │ └── Tests │ │ │ ├── Api │ │ │ ├── Api_Default_Test.php │ │ │ └── Api_User_Test.php │ │ │ ├── Domain │ │ │ └── Domain_User_Test.php │ │ │ ├── Model │ │ │ └── Model_User_Test.php │ │ │ ├── phpunit.xml │ │ │ ├── phpunit_user_getbaseinfo.xml │ │ │ └── test_env.php │ ├── LICENSE.md │ ├── Language │ │ ├── de │ │ │ └── common.php │ │ ├── en │ │ │ └── common.php │ │ ├── fr │ │ │ └── common.php │ │ ├── zh_cn │ │ │ └── common.php │ │ └── zh_tw │ │ │ └── common.php │ ├── Library │ │ ├── README.md │ │ └── Task │ │ │ ├── Config │ │ │ ├── app.php │ │ │ └── dbs.php │ │ │ ├── Data │ │ │ ├── phalapi_task_mq.sql │ │ │ ├── phalapi_task_progress.sql │ │ │ ├── task_mq.sql │ │ │ └── task_progress.sql │ │ │ ├── Lite.php │ │ │ ├── MQ.php │ │ │ ├── MQ │ │ │ ├── Array.php │ │ │ ├── DB.php │ │ │ ├── File.php │ │ │ ├── KeyValue.php │ │ │ ├── Memcached.php │ │ │ └── Redis.php │ │ │ ├── Progress.php │ │ │ ├── Progress │ │ │ ├── Trigger.php │ │ │ └── Trigger │ │ │ │ └── Common.php │ │ │ ├── Runner.php │ │ │ ├── Runner │ │ │ ├── Local.php │ │ │ ├── Remote.php │ │ │ └── Remote │ │ │ │ ├── Connector.php │ │ │ │ └── Connector │ │ │ │ └── Http.php │ │ │ ├── Task │ │ │ └── Model │ │ │ │ └── Task │ │ │ │ ├── TaskMq.php │ │ │ │ └── TaskProgress.php │ │ │ ├── Tests │ │ │ ├── MQ │ │ │ │ ├── Task_MQ_Array_Test.php │ │ │ │ ├── Task_MQ_DB_Test.php │ │ │ │ ├── Task_MQ_File_Test.php │ │ │ │ ├── Task_MQ_Memcached_Test.php │ │ │ │ └── Task_MQ_Redis_Test.php │ │ │ ├── Runner │ │ │ │ ├── Task_Runner_Local_Test.php │ │ │ │ └── Task_Runner_Remote_Test.php │ │ │ ├── Task_Lite_Test.php │ │ │ ├── Task_Progress_Test.php │ │ │ ├── Task_Runner_Test.php │ │ │ └── test_env.php │ │ │ ├── check.php │ │ │ └── crontab.php │ ├── PhalApi │ │ ├── Language │ │ │ ├── en │ │ │ │ └── common.php │ │ │ └── zh_cn │ │ │ │ └── common.php │ │ ├── NotORM │ │ │ ├── NotORM.php │ │ │ └── NotORM │ │ │ │ ├── Cache.php │ │ │ │ ├── Literal.php │ │ │ │ ├── MultiResult.php │ │ │ │ ├── Result.php │ │ │ │ ├── Row.php │ │ │ │ └── Structure.php │ │ ├── PhalApi.php │ │ ├── PhalApi │ │ │ ├── Api.php │ │ │ ├── ApiFactory.php │ │ │ ├── CUrl.php │ │ │ ├── Cache.php │ │ │ ├── Cache │ │ │ │ ├── APCU.php │ │ │ │ ├── File.php │ │ │ │ ├── Memcache.php │ │ │ │ ├── Memcached.php │ │ │ │ ├── Multi.php │ │ │ │ ├── None.php │ │ │ │ └── Redis.php │ │ │ ├── Config.php │ │ │ ├── Config │ │ │ │ ├── File.php │ │ │ │ └── Yaconf.php │ │ │ ├── Cookie.php │ │ │ ├── Cookie │ │ │ │ └── Multi.php │ │ │ ├── Crypt.php │ │ │ ├── Crypt │ │ │ │ ├── Mcrypt.php │ │ │ │ ├── MultiMcrypt.php │ │ │ │ └── RSA │ │ │ │ │ ├── KeyGenerator.php │ │ │ │ │ ├── MultiBase.php │ │ │ │ │ ├── MultiPri2Pub.php │ │ │ │ │ ├── MultiPub2Pri.php │ │ │ │ │ ├── Pri2Pub.php │ │ │ │ │ └── Pub2Pri.php │ │ │ ├── DB.php │ │ │ ├── DB │ │ │ │ └── NotORM.php │ │ │ ├── DI.php │ │ │ ├── Exception.php │ │ │ ├── Exception │ │ │ │ ├── BadRequest.php │ │ │ │ └── InternalServerError.php │ │ │ ├── Filter.php │ │ │ ├── Filter │ │ │ │ ├── None.php │ │ │ │ └── SimpleMD5.php │ │ │ ├── Helper │ │ │ │ ├── ApiDesc.php │ │ │ │ ├── TestRunner.php │ │ │ │ ├── Tracer.php │ │ │ │ ├── _Api.php.tpl │ │ │ │ ├── _Domain.php.tpl │ │ │ │ ├── _Model.php.tpl │ │ │ │ └── api_desc_tpl.php │ │ │ ├── Loader.php │ │ │ ├── Logger.php │ │ │ ├── Logger │ │ │ │ ├── Explorer.php │ │ │ │ └── File.php │ │ │ ├── Model.php │ │ │ ├── Model │ │ │ │ └── NotORM.php │ │ │ ├── ModelProxy.php │ │ │ ├── ModelQuery.php │ │ │ ├── Request.php │ │ │ ├── Request │ │ │ │ ├── Formatter.php │ │ │ │ ├── Formatter │ │ │ │ │ ├── Array.php │ │ │ │ │ ├── Base.php │ │ │ │ │ ├── Boolean.php │ │ │ │ │ ├── Callable.php │ │ │ │ │ ├── Callback.php │ │ │ │ │ ├── Date.php │ │ │ │ │ ├── Enum.php │ │ │ │ │ ├── File.php │ │ │ │ │ ├── Float.php │ │ │ │ │ ├── Int.php │ │ │ │ │ └── String.php │ │ │ │ └── Var.php │ │ │ ├── Response.php │ │ │ ├── Response │ │ │ │ ├── Explorer.php │ │ │ │ ├── Json.php │ │ │ │ └── JsonP.php │ │ │ ├── Tool.php │ │ │ ├── Translator.php │ │ │ └── functions.php │ │ ├── Tests │ │ │ ├── Cache │ │ │ │ ├── PhalApi_Cache_APCU_Test.php │ │ │ │ ├── PhalApi_Cache_File_Test.php │ │ │ │ ├── PhalApi_Cache_Memcache_Test.php │ │ │ │ ├── PhalApi_Cache_Memcached_Test.php │ │ │ │ ├── PhalApi_Cache_Multi_Test.php │ │ │ │ ├── PhalApi_Cache_None_Test.php │ │ │ │ └── PhalApi_Cache_Redis_Test.php │ │ │ ├── Config │ │ │ │ ├── PhalApi_Config_Yaconf_Test.php │ │ │ │ ├── app.php │ │ │ │ ├── dbs.php │ │ │ │ └── sys.php │ │ │ ├── Cookie │ │ │ │ └── PhalApi_Cookie_Multi_Test.php │ │ │ ├── Crypt │ │ │ │ ├── PhalApi_Crypt_Mcrypt_Test.php │ │ │ │ ├── PhalApi_Crypt_MultiCrypt_Mcrypt_Test.php │ │ │ │ └── RSA │ │ │ │ │ ├── PhalApi_Crypt_RSA_MultiPri2Pub_Test.php │ │ │ │ │ ├── PhalApi_Crypt_RSA_MultiPub2Pri_Test.php │ │ │ │ │ └── PhalApi_Crypt_RSA_Pri2Pub_Test.php │ │ │ ├── DB │ │ │ │ └── PhalApi_DB_NotORM_Test.php │ │ │ ├── Data │ │ │ │ ├── Language │ │ │ │ │ └── zh_cn │ │ │ │ │ │ └── common.php │ │ │ │ └── phalapi_test.sql │ │ │ ├── Filter │ │ │ │ ├── PhalApi_Filter_None_Test.php │ │ │ │ └── PhalApi_Filter_SimpleMd5_Test.php │ │ │ ├── Helper │ │ │ │ ├── PhalApi_Helper_ApiDesc_Test.php │ │ │ │ ├── PhalApi_Helper_TestRunner_Test.php │ │ │ │ └── PhalApi_Helper_Tracer_Test.php │ │ │ ├── Language │ │ │ │ └── zh_cn │ │ │ │ │ └── common.php │ │ │ ├── Logger │ │ │ │ ├── PhalApi_Logger_Explorer_Test.php │ │ │ │ └── PhalApi_Logger_File_Test.php │ │ │ ├── Model │ │ │ │ └── PhalApi_Model_NotORM_Test.php │ │ │ ├── PhalApi_ApiFactory_Test.php │ │ │ ├── PhalApi_Api_Test.php │ │ │ ├── PhalApi_CUrl_Test.php │ │ │ ├── PhalApi_Config_File_Test.php │ │ │ ├── PhalApi_Cookie_Test.php │ │ │ ├── PhalApi_DI_Test.php │ │ │ ├── PhalApi_Loader_Test.php │ │ │ ├── PhalApi_ModelProxy_Test.php │ │ │ ├── PhalApi_ModelQuery_Test.php │ │ │ ├── PhalApi_Request_Test.php │ │ │ ├── PhalApi_Response_Test.php │ │ │ ├── PhalApi_Test.php │ │ │ ├── PhalApi_Tool_Test.php │ │ │ ├── PhalApi_Translator_Test.php │ │ │ ├── Request │ │ │ │ ├── Formatter │ │ │ │ │ ├── Classes │ │ │ │ │ │ ├── FormatterCallbackMyClass.php │ │ │ │ │ │ └── FormatterCallbackMyClass2.php │ │ │ │ │ ├── PhalApi_Request_Formatter_Array_Test.php │ │ │ │ │ ├── PhalApi_Request_Formatter_Boolean_Test.php │ │ │ │ │ ├── PhalApi_Request_Formatter_Callable_Test.php │ │ │ │ │ ├── PhalApi_Request_Formatter_Date_Test.php │ │ │ │ │ ├── PhalApi_Request_Formatter_Enum.php │ │ │ │ │ └── PhalApi_Request_Formatter_File_Test.php │ │ │ │ └── PhalApi_Request_Var_Test.php │ │ │ ├── phpunit.xml │ │ │ ├── test_env.php │ │ │ └── test_file_for_loader.php │ │ ├── build_code.php │ │ ├── build_sqls.php │ │ ├── build_test.php │ │ ├── phalapi-buildapp │ │ ├── phalapi-buildcode │ │ ├── phalapi-buildsqls │ │ └── phalapi-buildtest │ ├── Public │ │ ├── demo │ │ │ ├── checkApiParams.php │ │ │ ├── index.php │ │ │ └── listAllApis.php │ │ ├── fami │ │ │ ├── checkApiParams.php │ │ │ ├── index.php │ │ │ └── listAllApis.php │ │ ├── index.php │ │ ├── init.php │ │ ├── install │ │ │ ├── _error.php │ │ │ ├── _footer.php │ │ │ ├── _header.php │ │ │ ├── _start.php │ │ │ ├── _step1.php │ │ │ ├── _step2.php │ │ │ ├── _step3.php │ │ │ ├── index.php │ │ │ └── static │ │ │ │ └── css │ │ │ │ └── pintuer.css │ │ └── scale │ │ │ ├── checkApiParams.php │ │ │ ├── index.php │ │ │ └── listAllApis.php │ ├── README.md │ ├── Runtime │ │ └── README.md │ ├── SDK │ │ ├── C_Sharp │ │ │ └── PhalApiClient │ │ │ │ ├── PhalApiClient.cs │ │ │ │ ├── PhalApiClientFilter.cs │ │ │ │ ├── PhalApiClientParser.cs │ │ │ │ ├── PhalApiClientParserJson.cs │ │ │ │ └── PhalApiClientResponse.cs │ │ ├── Go │ │ │ ├── PhalApiClient │ │ │ │ └── PhalApiClient.go │ │ │ └── main.go │ │ ├── JAVA │ │ │ └── net │ │ │ │ └── phalapi │ │ │ │ └── sdk │ │ │ │ ├── PhalApiClient.java │ │ │ │ ├── PhalApiClientFilter.java │ │ │ │ ├── PhalApiClientParser.java │ │ │ │ ├── PhalApiClientParserJson.java │ │ │ │ └── PhalApiClientResponse.java │ │ ├── JS │ │ │ ├── demo.html │ │ │ └── js │ │ │ │ └── SDK │ │ │ │ ├── PhalApi.js │ │ │ │ └── jquery.min.js │ │ ├── Objective-C │ │ │ ├── PhalApiClient │ │ │ │ ├── AFNPhalApiClient │ │ │ │ │ ├── AFNPhalApiClient.h │ │ │ │ │ ├── AFNPhalApiClient.m │ │ │ │ │ └── Vendor │ │ │ │ │ │ └── AFNetworking-2.6.1 │ │ │ │ │ │ ├── AFHTTPRequestOperation.h │ │ │ │ │ │ ├── AFHTTPRequestOperation.m │ │ │ │ │ │ ├── AFHTTPRequestOperationManager.h │ │ │ │ │ │ ├── AFHTTPRequestOperationManager.m │ │ │ │ │ │ ├── AFHTTPSessionManager.h │ │ │ │ │ │ ├── AFHTTPSessionManager.m │ │ │ │ │ │ ├── AFNetworkReachabilityManager.h │ │ │ │ │ │ ├── AFNetworkReachabilityManager.m │ │ │ │ │ │ ├── AFNetworking.h │ │ │ │ │ │ ├── AFSecurityPolicy.h │ │ │ │ │ │ ├── AFSecurityPolicy.m │ │ │ │ │ │ ├── AFURLConnectionOperation.h │ │ │ │ │ │ ├── AFURLConnectionOperation.m │ │ │ │ │ │ ├── AFURLRequestSerialization.h │ │ │ │ │ │ ├── AFURLRequestSerialization.m │ │ │ │ │ │ ├── AFURLResponseSerialization.h │ │ │ │ │ │ ├── AFURLResponseSerialization.m │ │ │ │ │ │ ├── AFURLSessionManager.h │ │ │ │ │ │ └── AFURLSessionManager.m │ │ │ │ ├── PhalApiClient.h │ │ │ │ ├── PhalApiClient.m │ │ │ │ ├── PhalApiClientFilter.h │ │ │ │ └── PhalApiClientFilter.m │ │ │ └── XSHttpTool │ │ │ │ ├── AFNetworking │ │ │ │ ├── AFDownloadRequestOperation │ │ │ │ │ ├── AFDownloadRequestOperation.h │ │ │ │ │ └── AFDownloadRequestOperation.m │ │ │ │ ├── AFHTTPRequestOperation.h │ │ │ │ ├── AFHTTPRequestOperation.m │ │ │ │ ├── AFHTTPRequestOperationManager.h │ │ │ │ ├── AFHTTPRequestOperationManager.m │ │ │ │ ├── AFHTTPSessionManager.h │ │ │ │ ├── AFHTTPSessionManager.m │ │ │ │ ├── AFNetworkReachabilityManager.h │ │ │ │ ├── AFNetworkReachabilityManager.m │ │ │ │ ├── AFNetworking.h │ │ │ │ ├── AFSecurityPolicy.h │ │ │ │ ├── AFSecurityPolicy.m │ │ │ │ ├── AFURLConnectionOperation.h │ │ │ │ ├── AFURLConnectionOperation.m │ │ │ │ ├── AFURLRequestSerialization.h │ │ │ │ ├── AFURLRequestSerialization.m │ │ │ │ ├── AFURLResponseSerialization.h │ │ │ │ ├── AFURLResponseSerialization.m │ │ │ │ ├── AFURLSessionManager.h │ │ │ │ ├── AFURLSessionManager.m │ │ │ │ └── UIKit+AFNetworking │ │ │ │ │ ├── AFNetworkActivityIndicatorManager.h │ │ │ │ │ ├── AFNetworkActivityIndicatorManager.m │ │ │ │ │ ├── UIActivityIndicatorView+AFNetworking.h │ │ │ │ │ ├── UIActivityIndicatorView+AFNetworking.m │ │ │ │ │ ├── UIAlertView+AFNetworking.h │ │ │ │ │ ├── UIAlertView+AFNetworking.m │ │ │ │ │ ├── UIButton+AFNetworking.h │ │ │ │ │ ├── UIButton+AFNetworking.m │ │ │ │ │ ├── UIImageView+AFNetworking.h │ │ │ │ │ ├── UIImageView+AFNetworking.m │ │ │ │ │ ├── UIKit+AFNetworking.h │ │ │ │ │ ├── UIProgressView+AFNetworking.h │ │ │ │ │ ├── UIProgressView+AFNetworking.m │ │ │ │ │ ├── UIRefreshControl+AFNetworking.h │ │ │ │ │ ├── UIRefreshControl+AFNetworking.m │ │ │ │ │ ├── UIWebView+AFNetworking.h │ │ │ │ │ └── UIWebView+AFNetworking.m │ │ │ │ ├── README.md │ │ │ │ ├── Singleton.h │ │ │ │ ├── XSHttpTool.h │ │ │ │ └── XSHttpTool.m │ │ ├── PHP │ │ │ └── PhalApiClient │ │ │ │ ├── PhalApiClient.php │ │ │ │ └── demo.php │ │ ├── Python │ │ │ └── PhalApiClient │ │ │ │ ├── RequestResult.txt │ │ │ │ ├── python2.x │ │ │ │ ├── PhalApiClient.py │ │ │ │ ├── __init__.py │ │ │ │ └── demo.py │ │ │ │ └── python3.x │ │ │ │ ├── PhalApiClient.py │ │ │ │ ├── __init__.py │ │ │ │ └── demo.py │ │ ├── React-Native │ │ │ └── PhalApi.js │ │ └── Ruby │ │ │ └── PhalApiClient │ │ │ ├── demo.rb │ │ │ ├── phalapi_client.rb │ │ │ └── tests │ │ │ ├── client.rb │ │ │ ├── client_parser_json.rb │ │ │ ├── client_response.rb │ │ │ └── run_tests │ ├── Scale │ │ ├── Api │ │ │ └── Default.php │ │ └── Tests │ │ │ ├── Api │ │ │ └── Api_Default_Test.php │ │ │ ├── phpunit.xml │ │ │ └── test_env.php │ ├── build.xml │ ├── composer.json │ ├── logo.jpg │ ├── rollback.xml │ └── sh │ │ ├── api.v2.family.com_1_50_with_cache.png │ │ ├── api.v2.family.com_1_50_with_cache.tsv │ │ ├── api.v2.family.com_1_50_without_cache.png │ │ ├── api.v2.family.com_1_50_without_cache.tsv │ │ └── autobench.sh ├── Forever │ ├── Config │ │ ├── app.php │ │ ├── dbs.php │ │ └── sys.php │ ├── Data │ │ ├── demo.sql │ │ ├── phalapi_test.sql │ │ └── user.sql │ ├── Demo │ │ ├── Api │ │ │ ├── Default.php │ │ │ └── User │ │ │ │ ├── Check.php │ │ │ │ ├── Login.php │ │ │ │ └── Register.php │ │ ├── Common │ │ │ ├── Request.php │ │ │ └── Response.php │ │ ├── Domain │ │ │ ├── Password.php │ │ │ └── User.php │ │ └── Tests │ │ │ ├── Api │ │ │ └── Api_Default_Test.php │ │ │ ├── phpunit.xml │ │ │ ├── phpunit_user_getbaseinfo.xml │ │ │ └── test_env.php │ ├── LICENSE.md │ ├── Language │ │ ├── de │ │ │ └── common.php │ │ ├── en │ │ │ └── common.php │ │ ├── fr │ │ │ └── common.php │ │ ├── jp │ │ │ └── common.php │ │ ├── zh_cn │ │ │ └── common.php │ │ └── zh_tw │ │ │ └── common.php │ ├── Library │ │ ├── CLI │ │ │ ├── Lite.php │ │ │ ├── README.md │ │ │ └── Ulrichsg │ │ │ │ └── Getopt │ │ │ │ ├── Argument.php │ │ │ │ ├── CommandLineParser.php │ │ │ │ ├── Getopt.php │ │ │ │ ├── Option.php │ │ │ │ └── OptionParser.php │ │ ├── FastRoute │ │ │ ├── Config │ │ │ │ └── app.php │ │ │ ├── FastRoute │ │ │ │ ├── .travis.yml │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── composer.json │ │ │ │ ├── phpunit.xml │ │ │ │ ├── src │ │ │ │ │ ├── BadRouteException.php │ │ │ │ │ ├── DataGenerator.php │ │ │ │ │ ├── DataGenerator │ │ │ │ │ │ ├── CharCountBased.php │ │ │ │ │ │ ├── GroupCountBased.php │ │ │ │ │ │ ├── GroupPosBased.php │ │ │ │ │ │ ├── MarkBased.php │ │ │ │ │ │ └── RegexBasedAbstract.php │ │ │ │ │ ├── Dispatcher.php │ │ │ │ │ ├── Dispatcher │ │ │ │ │ │ ├── CharCountBased.php │ │ │ │ │ │ ├── GroupCountBased.php │ │ │ │ │ │ ├── GroupPosBased.php │ │ │ │ │ │ ├── MarkBased.php │ │ │ │ │ │ └── RegexBasedAbstract.php │ │ │ │ │ ├── Route.php │ │ │ │ │ ├── RouteCollector.php │ │ │ │ │ ├── RouteParser.php │ │ │ │ │ ├── RouteParser │ │ │ │ │ │ └── Std.php │ │ │ │ │ ├── bootstrap.php │ │ │ │ │ └── functions.php │ │ │ │ └── test │ │ │ │ │ ├── Dispatcher │ │ │ │ │ ├── CharCountBasedTest.php │ │ │ │ │ ├── DispatcherTest.php │ │ │ │ │ ├── GroupCountBasedTest.php │ │ │ │ │ ├── GroupPosBasedTest.php │ │ │ │ │ └── MarkBasedTest.php │ │ │ │ │ ├── RouteParser │ │ │ │ │ └── StdTest.php │ │ │ │ │ └── bootstrap.php │ │ │ ├── Handler.php │ │ │ ├── Handler │ │ │ │ └── Error.php │ │ │ ├── Language │ │ │ │ └── zh_cn │ │ │ │ │ └── common.php │ │ │ └── Lite.php │ │ ├── PHPRPC │ │ │ ├── Lite.php │ │ │ ├── PhalApi.php │ │ │ ├── check.php │ │ │ └── phprpc │ │ │ │ ├── bigint.php │ │ │ │ ├── compat.php │ │ │ │ ├── dhparams.php │ │ │ │ ├── dhparams │ │ │ │ ├── 1024.dhp │ │ │ │ ├── 128.dhp │ │ │ │ ├── 1536.dhp │ │ │ │ ├── 160.dhp │ │ │ │ ├── 192.dhp │ │ │ │ ├── 2048.dhp │ │ │ │ ├── 256.dhp │ │ │ │ ├── 3072.dhp │ │ │ │ ├── 4096.dhp │ │ │ │ ├── 512.dhp │ │ │ │ ├── 768.dhp │ │ │ │ └── 96.dhp │ │ │ │ ├── phprpc_client.php │ │ │ │ ├── phprpc_date.php │ │ │ │ ├── phprpc_server.php │ │ │ │ └── xxtea.php │ │ ├── Qiniu │ │ │ ├── CDN │ │ │ │ └── Api │ │ │ │ │ └── Qiniu │ │ │ │ │ └── CDN.php │ │ │ ├── Lite.php │ │ │ ├── qiniu │ │ │ │ ├── auth_digest.php │ │ │ │ ├── conf.php │ │ │ │ ├── fop.php │ │ │ │ ├── http.php │ │ │ │ ├── io.php │ │ │ │ ├── resumable_io.php │ │ │ │ ├── rs.php │ │ │ │ ├── rs_utils.php │ │ │ │ ├── rsf.php │ │ │ │ └── utils.php │ │ │ └── usage │ │ │ │ └── CDN.php │ │ ├── README.md │ │ ├── SOAP │ │ │ ├── Config │ │ │ │ └── app.php │ │ │ ├── Lite.php │ │ │ ├── PhalApi.php │ │ │ └── check.php │ │ ├── Task │ │ │ ├── Config │ │ │ │ ├── app.php │ │ │ │ └── dbs.php │ │ │ ├── Data │ │ │ │ ├── phalapi_task_mq.sql │ │ │ │ ├── phalapi_task_progress.sql │ │ │ │ ├── task_mq.sql │ │ │ │ └── task_progress.sql │ │ │ ├── Lite.php │ │ │ ├── MQ.php │ │ │ ├── MQ │ │ │ │ ├── Array.php │ │ │ │ ├── DB.php │ │ │ │ ├── File.php │ │ │ │ ├── KeyValue.php │ │ │ │ ├── Memcached.php │ │ │ │ └── Redis.php │ │ │ ├── Progress.php │ │ │ ├── Progress │ │ │ │ ├── Trigger.php │ │ │ │ └── Trigger │ │ │ │ │ └── Common.php │ │ │ ├── Runner.php │ │ │ ├── Runner │ │ │ │ ├── Local.php │ │ │ │ ├── Remote.php │ │ │ │ └── Remote │ │ │ │ │ ├── Connector.php │ │ │ │ │ └── Connector │ │ │ │ │ └── Http.php │ │ │ ├── Task │ │ │ │ └── Model │ │ │ │ │ └── Task │ │ │ │ │ ├── TaskMq.php │ │ │ │ │ └── TaskProgress.php │ │ │ ├── Tests │ │ │ │ ├── MQ │ │ │ │ │ ├── Task_MQ_Array_Test.php │ │ │ │ │ ├── Task_MQ_DB_Test.php │ │ │ │ │ ├── Task_MQ_File_Test.php │ │ │ │ │ ├── Task_MQ_Memcached_Test.php │ │ │ │ │ └── Task_MQ_Redis_Test.php │ │ │ │ ├── Runner │ │ │ │ │ ├── Task_Runner_Local_Test.php │ │ │ │ │ └── Task_Runner_Remote_Test.php │ │ │ │ ├── Task_Lite_Test.php │ │ │ │ ├── Task_Progress_Test.php │ │ │ │ ├── Task_Runner_Test.php │ │ │ │ └── test_env.php │ │ │ ├── check.php │ │ │ └── crontab.php │ │ └── Wechat │ │ │ ├── InMessage.php │ │ │ ├── Lite.php │ │ │ ├── OutMessage.php │ │ │ ├── OutMessage │ │ │ ├── Image.php │ │ │ ├── Music.php │ │ │ ├── News.php │ │ │ ├── News │ │ │ │ └── Item.php │ │ │ ├── Text.php │ │ │ ├── Video.php │ │ │ └── Voice.php │ │ │ ├── Plugin │ │ │ ├── DeviceEvent.php │ │ │ ├── DeviceText.php │ │ │ ├── Event.php │ │ │ ├── Image.php │ │ │ ├── Link.php │ │ │ ├── Location.php │ │ │ ├── Text.php │ │ │ ├── Video.php │ │ │ └── Voice.php │ │ │ ├── Robot.php │ │ │ └── Tests │ │ │ ├── OutMessage │ │ │ ├── Wechat_OutMessage_Image_Test.php │ │ │ ├── Wechat_OutMessage_News_Test.php │ │ │ └── Wechat_OutMessage_Text_Test.php │ │ │ ├── Wechat_InMessage_Test.php │ │ │ ├── Wechat_Robot_Test.php │ │ │ └── send_wechat_text.php │ ├── PhalApi │ │ ├── Language │ │ │ ├── en │ │ │ │ └── common.php │ │ │ └── zh_cn │ │ │ │ └── common.php │ │ ├── NotORM │ │ │ ├── NotORM.php │ │ │ └── NotORM │ │ │ │ ├── Cache.php │ │ │ │ ├── Literal.php │ │ │ │ ├── MultiResult.php │ │ │ │ ├── Result.php │ │ │ │ ├── Row.php │ │ │ │ └── Structure.php │ │ ├── PhalApi.php │ │ ├── PhalApi │ │ │ ├── Api.php │ │ │ ├── ApiFactory.php │ │ │ ├── CUrl.php │ │ │ ├── Cache.php │ │ │ ├── Cache │ │ │ │ ├── APCU.php │ │ │ │ ├── File.php │ │ │ │ ├── Memcache.php │ │ │ │ ├── Memcached.php │ │ │ │ ├── Multi.php │ │ │ │ ├── None.php │ │ │ │ └── Redis.php │ │ │ ├── Config.php │ │ │ ├── Config │ │ │ │ ├── File.php │ │ │ │ └── Yaconf.php │ │ │ ├── Cookie.php │ │ │ ├── Cookie │ │ │ │ └── Multi.php │ │ │ ├── Crypt.php │ │ │ ├── Crypt │ │ │ │ ├── Mcrypt.php │ │ │ │ ├── MultiMcrypt.php │ │ │ │ └── RSA │ │ │ │ │ ├── KeyGenerator.php │ │ │ │ │ ├── MultiBase.php │ │ │ │ │ ├── MultiPri2Pub.php │ │ │ │ │ ├── MultiPub2Pri.php │ │ │ │ │ ├── Pri2Pub.php │ │ │ │ │ └── Pub2Pri.php │ │ │ ├── DB.php │ │ │ ├── DB │ │ │ │ └── NotORM.php │ │ │ ├── DI.php │ │ │ ├── Exception.php │ │ │ ├── Exception │ │ │ │ ├── BadRequest.php │ │ │ │ └── InternalServerError.php │ │ │ ├── Filter.php │ │ │ ├── Filter │ │ │ │ ├── None.php │ │ │ │ └── SimpleMD5.php │ │ │ ├── Helper │ │ │ │ ├── ApiDesc.php │ │ │ │ ├── TestRunner.php │ │ │ │ ├── Tracer.php │ │ │ │ ├── _Api.php.tpl │ │ │ │ ├── _Domain.php.tpl │ │ │ │ ├── _Model.php.tpl │ │ │ │ └── api_desc_tpl.php │ │ │ ├── Loader.php │ │ │ ├── Logger.php │ │ │ ├── Logger │ │ │ │ ├── Explorer.php │ │ │ │ └── File.php │ │ │ ├── Model.php │ │ │ ├── Model │ │ │ │ └── NotORM.php │ │ │ ├── ModelProxy.php │ │ │ ├── ModelQuery.php │ │ │ ├── Request.php │ │ │ ├── Request │ │ │ │ ├── Formatter.php │ │ │ │ ├── Formatter │ │ │ │ │ ├── Array.php │ │ │ │ │ ├── Base.php │ │ │ │ │ ├── Boolean.php │ │ │ │ │ ├── Callable.php │ │ │ │ │ ├── Callback.php │ │ │ │ │ ├── Date.php │ │ │ │ │ ├── Enum.php │ │ │ │ │ ├── File.php │ │ │ │ │ ├── Float.php │ │ │ │ │ ├── Int.php │ │ │ │ │ └── String.php │ │ │ │ └── Var.php │ │ │ ├── Response.php │ │ │ ├── Response │ │ │ │ ├── Explorer.php │ │ │ │ ├── Json.php │ │ │ │ └── JsonP.php │ │ │ ├── Tool.php │ │ │ ├── Translator.php │ │ │ └── functions.php │ │ ├── Tests │ │ │ ├── Cache │ │ │ │ ├── PhalApi_Cache_APCU_Test.php │ │ │ │ ├── PhalApi_Cache_File_Test.php │ │ │ │ ├── PhalApi_Cache_Memcache_Test.php │ │ │ │ ├── PhalApi_Cache_Memcached_Test.php │ │ │ │ ├── PhalApi_Cache_Multi_Test.php │ │ │ │ ├── PhalApi_Cache_None_Test.php │ │ │ │ └── PhalApi_Cache_Redis_Test.php │ │ │ ├── Config │ │ │ │ ├── PhalApi_Config_Yaconf_Test.php │ │ │ │ ├── app.php │ │ │ │ ├── dbs.php │ │ │ │ └── sys.php │ │ │ ├── Cookie │ │ │ │ └── PhalApi_Cookie_Multi_Test.php │ │ │ ├── Crypt │ │ │ │ ├── PhalApi_Crypt_Mcrypt_Test.php │ │ │ │ ├── PhalApi_Crypt_MultiCrypt_Mcrypt_Test.php │ │ │ │ └── RSA │ │ │ │ │ ├── PhalApi_Crypt_RSA_MultiPri2Pub_Test.php │ │ │ │ │ ├── PhalApi_Crypt_RSA_MultiPub2Pri_Test.php │ │ │ │ │ └── PhalApi_Crypt_RSA_Pri2Pub_Test.php │ │ │ ├── DB │ │ │ │ └── PhalApi_DB_NotORM_Test.php │ │ │ ├── Data │ │ │ │ ├── Language │ │ │ │ │ └── zh_cn │ │ │ │ │ │ └── common.php │ │ │ │ └── phalapi_test.sql │ │ │ ├── Filter │ │ │ │ ├── PhalApi_Filter_None_Test.php │ │ │ │ └── PhalApi_Filter_SimpleMd5_Test.php │ │ │ ├── Helper │ │ │ │ ├── PhalApi_Helper_ApiDesc_Test.php │ │ │ │ ├── PhalApi_Helper_TestRunner_Test.php │ │ │ │ └── PhalApi_Helper_Tracer_Test.php │ │ │ ├── Language │ │ │ │ └── zh_cn │ │ │ │ │ └── common.php │ │ │ ├── Logger │ │ │ │ ├── PhalApi_Logger_Explorer_Test.php │ │ │ │ └── PhalApi_Logger_File_Test.php │ │ │ ├── Model │ │ │ │ └── PhalApi_Model_NotORM_Test.php │ │ │ ├── PhalApi_ApiFactory_Test.php │ │ │ ├── PhalApi_Api_Test.php │ │ │ ├── PhalApi_CUrl_Test.php │ │ │ ├── PhalApi_Config_File_Test.php │ │ │ ├── PhalApi_Cookie_Test.php │ │ │ ├── PhalApi_DI_Test.php │ │ │ ├── PhalApi_Loader_Test.php │ │ │ ├── PhalApi_ModelProxy_Test.php │ │ │ ├── PhalApi_ModelQuery_Test.php │ │ │ ├── PhalApi_Request_Test.php │ │ │ ├── PhalApi_Response_Test.php │ │ │ ├── PhalApi_Test.php │ │ │ ├── PhalApi_Tool_Test.php │ │ │ ├── PhalApi_Translator_Test.php │ │ │ ├── Request │ │ │ │ ├── Formatter │ │ │ │ │ ├── Classes │ │ │ │ │ │ ├── FormatterCallbackMyClass.php │ │ │ │ │ │ └── FormatterCallbackMyClass2.php │ │ │ │ │ ├── PhalApi_Request_Formatter_Array_Test.php │ │ │ │ │ ├── PhalApi_Request_Formatter_Boolean_Test.php │ │ │ │ │ ├── PhalApi_Request_Formatter_Callable_Test.php │ │ │ │ │ ├── PhalApi_Request_Formatter_Date_Test.php │ │ │ │ │ ├── PhalApi_Request_Formatter_Enum.php │ │ │ │ │ └── PhalApi_Request_Formatter_File_Test.php │ │ │ │ └── PhalApi_Request_Var_Test.php │ │ │ ├── phpunit.xml │ │ │ ├── test_env.php │ │ │ └── test_file_for_loader.php │ │ ├── build_code.php │ │ ├── build_sqls.php │ │ ├── build_test.php │ │ ├── phalapi-buildapp │ │ ├── phalapi-buildcode │ │ ├── phalapi-buildsqls │ │ └── phalapi-buildtest │ ├── Public │ │ ├── demo │ │ │ ├── checkApiParams.php │ │ │ ├── index.php │ │ │ └── listAllApis.php │ │ ├── index.php │ │ ├── init.php │ │ └── install │ │ │ ├── _error.php │ │ │ ├── _footer.php │ │ │ ├── _header.php │ │ │ ├── _install.lock │ │ │ ├── _start.php │ │ │ ├── _step1.php │ │ │ ├── _step2.php │ │ │ ├── _step3.php │ │ │ ├── index.php │ │ │ └── static │ │ │ └── css │ │ │ └── pintuer.css │ ├── Runtime │ │ └── README.md │ └── SDK │ │ ├── C_Sharp │ │ └── PhalApiClient │ │ │ ├── PhalApiClient.cs │ │ │ ├── PhalApiClientFilter.cs │ │ │ ├── PhalApiClientParser.cs │ │ │ ├── PhalApiClientParserJson.cs │ │ │ └── PhalApiClientResponse.cs │ │ ├── Go │ │ ├── PhalApiClient │ │ │ └── PhalApiClient.go │ │ └── main.go │ │ ├── JAVA │ │ └── net │ │ │ └── phalapi │ │ │ └── sdk │ │ │ ├── PhalApiClient.java │ │ │ ├── PhalApiClientFilter.java │ │ │ ├── PhalApiClientParser.java │ │ │ ├── PhalApiClientParserJson.java │ │ │ └── PhalApiClientResponse.java │ │ ├── JS │ │ ├── demo.html │ │ └── js │ │ │ └── SDK │ │ │ ├── PhalApi.js │ │ │ └── jquery.min.js │ │ ├── Objective-C │ │ ├── PhalApiClient │ │ │ ├── AFNPhalApiClient │ │ │ │ ├── AFNPhalApiClient.h │ │ │ │ ├── AFNPhalApiClient.m │ │ │ │ └── Vendor │ │ │ │ │ └── AFNetworking-2.6.1 │ │ │ │ │ ├── AFHTTPRequestOperation.h │ │ │ │ │ ├── AFHTTPRequestOperation.m │ │ │ │ │ ├── AFHTTPRequestOperationManager.h │ │ │ │ │ ├── AFHTTPRequestOperationManager.m │ │ │ │ │ ├── AFHTTPSessionManager.h │ │ │ │ │ ├── AFHTTPSessionManager.m │ │ │ │ │ ├── AFNetworkReachabilityManager.h │ │ │ │ │ ├── AFNetworkReachabilityManager.m │ │ │ │ │ ├── AFNetworking.h │ │ │ │ │ ├── AFSecurityPolicy.h │ │ │ │ │ ├── AFSecurityPolicy.m │ │ │ │ │ ├── AFURLConnectionOperation.h │ │ │ │ │ ├── AFURLConnectionOperation.m │ │ │ │ │ ├── AFURLRequestSerialization.h │ │ │ │ │ ├── AFURLRequestSerialization.m │ │ │ │ │ ├── AFURLResponseSerialization.h │ │ │ │ │ ├── AFURLResponseSerialization.m │ │ │ │ │ ├── AFURLSessionManager.h │ │ │ │ │ └── AFURLSessionManager.m │ │ │ ├── PhalApiClient.h │ │ │ ├── PhalApiClient.m │ │ │ ├── PhalApiClientFilter.h │ │ │ └── PhalApiClientFilter.m │ │ └── XSHttpTool │ │ │ ├── AFNetworking │ │ │ ├── AFDownloadRequestOperation │ │ │ │ ├── AFDownloadRequestOperation.h │ │ │ │ └── AFDownloadRequestOperation.m │ │ │ ├── AFHTTPRequestOperation.h │ │ │ ├── AFHTTPRequestOperation.m │ │ │ ├── AFHTTPRequestOperationManager.h │ │ │ ├── AFHTTPRequestOperationManager.m │ │ │ ├── AFHTTPSessionManager.h │ │ │ ├── AFHTTPSessionManager.m │ │ │ ├── AFNetworkReachabilityManager.h │ │ │ ├── AFNetworkReachabilityManager.m │ │ │ ├── AFNetworking.h │ │ │ ├── AFSecurityPolicy.h │ │ │ ├── AFSecurityPolicy.m │ │ │ ├── AFURLConnectionOperation.h │ │ │ ├── AFURLConnectionOperation.m │ │ │ ├── AFURLRequestSerialization.h │ │ │ ├── AFURLRequestSerialization.m │ │ │ ├── AFURLResponseSerialization.h │ │ │ ├── AFURLResponseSerialization.m │ │ │ ├── AFURLSessionManager.h │ │ │ ├── AFURLSessionManager.m │ │ │ └── UIKit+AFNetworking │ │ │ │ ├── AFNetworkActivityIndicatorManager.h │ │ │ │ ├── AFNetworkActivityIndicatorManager.m │ │ │ │ ├── UIActivityIndicatorView+AFNetworking.h │ │ │ │ ├── UIActivityIndicatorView+AFNetworking.m │ │ │ │ ├── UIAlertView+AFNetworking.h │ │ │ │ ├── UIAlertView+AFNetworking.m │ │ │ │ ├── UIButton+AFNetworking.h │ │ │ │ ├── UIButton+AFNetworking.m │ │ │ │ ├── UIImageView+AFNetworking.h │ │ │ │ ├── UIImageView+AFNetworking.m │ │ │ │ ├── UIKit+AFNetworking.h │ │ │ │ ├── UIProgressView+AFNetworking.h │ │ │ │ ├── UIProgressView+AFNetworking.m │ │ │ │ ├── UIRefreshControl+AFNetworking.h │ │ │ │ ├── UIRefreshControl+AFNetworking.m │ │ │ │ ├── UIWebView+AFNetworking.h │ │ │ │ └── UIWebView+AFNetworking.m │ │ │ ├── README.md │ │ │ ├── Singleton.h │ │ │ ├── XSHttpTool.h │ │ │ └── XSHttpTool.m │ │ ├── PHP │ │ └── PhalApiClient │ │ │ ├── PhalApiClient.php │ │ │ └── demo.php │ │ ├── Python │ │ └── PhalApiClient │ │ │ ├── RequestResult.txt │ │ │ ├── python2.x │ │ │ ├── PhalApiClient.py │ │ │ ├── __init__.py │ │ │ └── demo.py │ │ │ └── python3.x │ │ │ ├── PhalApiClient.py │ │ │ ├── __init__.py │ │ │ └── demo.py │ │ ├── React-Native │ │ └── PhalApi.js │ │ └── Ruby │ │ └── PhalApiClient │ │ ├── demo.rb │ │ ├── phalapi_client.rb │ │ └── tests │ │ ├── client.rb │ │ ├── client_parser_json.rb │ │ ├── client_response.rb │ │ └── run_tests ├── PhalApi │ ├── Act │ │ ├── Api │ │ │ └── Default.php │ │ └── Tests │ │ │ ├── Api │ │ │ └── Api_Default_Test.php │ │ │ ├── phpunit.xml │ │ │ └── test_env.php │ ├── Config │ │ ├── app.php │ │ ├── app.php.prod │ │ ├── dbs.php │ │ ├── sys.php │ │ └── sys.php.prod │ ├── Data │ │ ├── demo.sql │ │ ├── phalapi_test.sql │ │ └── user.sql │ ├── Demo │ │ ├── Api │ │ │ ├── Default.php │ │ │ └── User.php │ │ ├── Domain │ │ │ └── User.php │ │ ├── Model │ │ │ └── User.php │ │ ├── ModelProxy │ │ │ └── UserBaseInfo.php │ │ └── Tests │ │ │ ├── Api │ │ │ ├── Api_Default_Test.php │ │ │ └── Api_User_Test.php │ │ │ ├── Domain │ │ │ └── Domain_User_Test.php │ │ │ ├── Model │ │ │ └── Model_User_Test.php │ │ │ ├── phpunit.xml │ │ │ ├── phpunit_user_getbaseinfo.xml │ │ │ └── test_env.php │ ├── LICENSE.md │ ├── Language │ │ ├── de │ │ │ └── common.php │ │ ├── en │ │ │ └── common.php │ │ ├── fr │ │ │ └── common.php │ │ ├── jp │ │ │ └── common.php │ │ ├── zh_cn │ │ │ └── common.php │ │ └── zh_tw │ │ │ └── common.php │ ├── Library │ │ ├── CLI │ │ │ ├── Lite.php │ │ │ ├── README.md │ │ │ └── Ulrichsg │ │ │ │ └── Getopt │ │ │ │ ├── Argument.php │ │ │ │ ├── CommandLineParser.php │ │ │ │ ├── Getopt.php │ │ │ │ ├── Option.php │ │ │ │ └── OptionParser.php │ │ ├── FastRoute │ │ │ ├── Config │ │ │ │ └── app.php │ │ │ ├── FastRoute │ │ │ │ ├── .travis.yml │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── composer.json │ │ │ │ ├── phpunit.xml │ │ │ │ ├── src │ │ │ │ │ ├── BadRouteException.php │ │ │ │ │ ├── DataGenerator.php │ │ │ │ │ ├── DataGenerator │ │ │ │ │ │ ├── CharCountBased.php │ │ │ │ │ │ ├── GroupCountBased.php │ │ │ │ │ │ ├── GroupPosBased.php │ │ │ │ │ │ ├── MarkBased.php │ │ │ │ │ │ └── RegexBasedAbstract.php │ │ │ │ │ ├── Dispatcher.php │ │ │ │ │ ├── Dispatcher │ │ │ │ │ │ ├── CharCountBased.php │ │ │ │ │ │ ├── GroupCountBased.php │ │ │ │ │ │ ├── GroupPosBased.php │ │ │ │ │ │ ├── MarkBased.php │ │ │ │ │ │ └── RegexBasedAbstract.php │ │ │ │ │ ├── Route.php │ │ │ │ │ ├── RouteCollector.php │ │ │ │ │ ├── RouteParser.php │ │ │ │ │ ├── RouteParser │ │ │ │ │ │ └── Std.php │ │ │ │ │ ├── bootstrap.php │ │ │ │ │ └── functions.php │ │ │ │ └── test │ │ │ │ │ ├── Dispatcher │ │ │ │ │ ├── CharCountBasedTest.php │ │ │ │ │ ├── DispatcherTest.php │ │ │ │ │ ├── GroupCountBasedTest.php │ │ │ │ │ ├── GroupPosBasedTest.php │ │ │ │ │ └── MarkBasedTest.php │ │ │ │ │ ├── RouteParser │ │ │ │ │ └── StdTest.php │ │ │ │ │ └── bootstrap.php │ │ │ ├── Handler.php │ │ │ ├── Handler │ │ │ │ └── Error.php │ │ │ ├── Language │ │ │ │ └── zh_cn │ │ │ │ │ └── common.php │ │ │ └── Lite.php │ │ ├── PHPRPC │ │ │ ├── Lite.php │ │ │ ├── PhalApi.php │ │ │ ├── check.php │ │ │ └── phprpc │ │ │ │ ├── bigint.php │ │ │ │ ├── compat.php │ │ │ │ ├── dhparams.php │ │ │ │ ├── dhparams │ │ │ │ ├── 1024.dhp │ │ │ │ ├── 128.dhp │ │ │ │ ├── 1536.dhp │ │ │ │ ├── 160.dhp │ │ │ │ ├── 192.dhp │ │ │ │ ├── 2048.dhp │ │ │ │ ├── 256.dhp │ │ │ │ ├── 3072.dhp │ │ │ │ ├── 4096.dhp │ │ │ │ ├── 512.dhp │ │ │ │ ├── 768.dhp │ │ │ │ └── 96.dhp │ │ │ │ ├── phprpc_client.php │ │ │ │ ├── phprpc_date.php │ │ │ │ ├── phprpc_server.php │ │ │ │ └── xxtea.php │ │ ├── Qiniu │ │ │ ├── CDN │ │ │ │ └── Api │ │ │ │ │ └── Qiniu │ │ │ │ │ └── CDN.php │ │ │ ├── Lite.php │ │ │ ├── qiniu │ │ │ │ ├── auth_digest.php │ │ │ │ ├── conf.php │ │ │ │ ├── fop.php │ │ │ │ ├── http.php │ │ │ │ ├── io.php │ │ │ │ ├── resumable_io.php │ │ │ │ ├── rs.php │ │ │ │ ├── rs_utils.php │ │ │ │ ├── rsf.php │ │ │ │ └── utils.php │ │ │ └── usage │ │ │ │ └── CDN.php │ │ ├── README.md │ │ ├── SOAP │ │ │ ├── Config │ │ │ │ └── app.php │ │ │ ├── Lite.php │ │ │ ├── PhalApi.php │ │ │ └── check.php │ │ ├── Task │ │ │ ├── Config │ │ │ │ ├── app.php │ │ │ │ └── dbs.php │ │ │ ├── Data │ │ │ │ ├── phalapi_task_mq.sql │ │ │ │ ├── phalapi_task_progress.sql │ │ │ │ ├── task_mq.sql │ │ │ │ └── task_progress.sql │ │ │ ├── Lite.php │ │ │ ├── MQ.php │ │ │ ├── MQ │ │ │ │ ├── Array.php │ │ │ │ ├── DB.php │ │ │ │ ├── File.php │ │ │ │ ├── KeyValue.php │ │ │ │ ├── Memcached.php │ │ │ │ └── Redis.php │ │ │ ├── Progress.php │ │ │ ├── Progress │ │ │ │ ├── Trigger.php │ │ │ │ └── Trigger │ │ │ │ │ └── Common.php │ │ │ ├── Runner.php │ │ │ ├── Runner │ │ │ │ ├── Local.php │ │ │ │ ├── Remote.php │ │ │ │ └── Remote │ │ │ │ │ ├── Connector.php │ │ │ │ │ └── Connector │ │ │ │ │ └── Http.php │ │ │ ├── Task │ │ │ │ └── Model │ │ │ │ │ └── Task │ │ │ │ │ ├── TaskMq.php │ │ │ │ │ └── TaskProgress.php │ │ │ ├── Tests │ │ │ │ ├── MQ │ │ │ │ │ ├── Task_MQ_Array_Test.php │ │ │ │ │ ├── Task_MQ_DB_Test.php │ │ │ │ │ ├── Task_MQ_File_Test.php │ │ │ │ │ ├── Task_MQ_Memcached_Test.php │ │ │ │ │ └── Task_MQ_Redis_Test.php │ │ │ │ ├── Runner │ │ │ │ │ ├── Task_Runner_Local_Test.php │ │ │ │ │ └── Task_Runner_Remote_Test.php │ │ │ │ ├── Task_Lite_Test.php │ │ │ │ ├── Task_Progress_Test.php │ │ │ │ ├── Task_Runner_Test.php │ │ │ │ └── test_env.php │ │ │ ├── check.php │ │ │ └── crontab.php │ │ └── Wechat │ │ │ ├── InMessage.php │ │ │ ├── Lite.php │ │ │ ├── OutMessage.php │ │ │ ├── OutMessage │ │ │ ├── Image.php │ │ │ ├── Music.php │ │ │ ├── News.php │ │ │ ├── News │ │ │ │ └── Item.php │ │ │ ├── Text.php │ │ │ ├── Video.php │ │ │ └── Voice.php │ │ │ ├── Plugin │ │ │ ├── DeviceEvent.php │ │ │ ├── DeviceText.php │ │ │ ├── Event.php │ │ │ ├── Image.php │ │ │ ├── Link.php │ │ │ ├── Location.php │ │ │ ├── Text.php │ │ │ ├── Video.php │ │ │ └── Voice.php │ │ │ ├── Robot.php │ │ │ └── Tests │ │ │ ├── OutMessage │ │ │ ├── Wechat_OutMessage_Image_Test.php │ │ │ ├── Wechat_OutMessage_News_Test.php │ │ │ └── Wechat_OutMessage_Text_Test.php │ │ │ ├── Wechat_InMessage_Test.php │ │ │ ├── Wechat_Robot_Test.php │ │ │ └── send_wechat_text.php │ ├── PhalApi │ │ ├── Language │ │ │ ├── en │ │ │ │ └── common.php │ │ │ └── zh_cn │ │ │ │ └── common.php │ │ ├── NotORM │ │ │ ├── NotORM.php │ │ │ └── NotORM │ │ │ │ ├── Cache.php │ │ │ │ ├── Literal.php │ │ │ │ ├── MultiResult.php │ │ │ │ ├── Result.php │ │ │ │ ├── Row.php │ │ │ │ └── Structure.php │ │ ├── PhalApi.php │ │ ├── PhalApi │ │ │ ├── Api.php │ │ │ ├── ApiFactory.php │ │ │ ├── CUrl.php │ │ │ ├── Cache.php │ │ │ ├── Cache │ │ │ │ ├── APCU.php │ │ │ │ ├── File.php │ │ │ │ ├── Memcache.php │ │ │ │ ├── Memcached.php │ │ │ │ ├── Multi.php │ │ │ │ ├── None.php │ │ │ │ └── Redis.php │ │ │ ├── Config.php │ │ │ ├── Config │ │ │ │ ├── File.php │ │ │ │ └── Yaconf.php │ │ │ ├── Cookie.php │ │ │ ├── Cookie │ │ │ │ └── Multi.php │ │ │ ├── Crypt.php │ │ │ ├── Crypt │ │ │ │ ├── Mcrypt.php │ │ │ │ ├── MultiMcrypt.php │ │ │ │ └── RSA │ │ │ │ │ ├── KeyGenerator.php │ │ │ │ │ ├── MultiBase.php │ │ │ │ │ ├── MultiPri2Pub.php │ │ │ │ │ ├── MultiPub2Pri.php │ │ │ │ │ ├── Pri2Pub.php │ │ │ │ │ └── Pub2Pri.php │ │ │ ├── DB.php │ │ │ ├── DB │ │ │ │ └── NotORM.php │ │ │ ├── DI.php │ │ │ ├── Exception.php │ │ │ ├── Exception │ │ │ │ ├── BadRequest.php │ │ │ │ └── InternalServerError.php │ │ │ ├── Filter.php │ │ │ ├── Filter │ │ │ │ ├── None.php │ │ │ │ └── SimpleMD5.php │ │ │ ├── Helper │ │ │ │ ├── ApiDesc.php │ │ │ │ ├── TestRunner.php │ │ │ │ ├── Tracer.php │ │ │ │ ├── _Api.php.tpl │ │ │ │ ├── _Domain.php.tpl │ │ │ │ ├── _Model.php.tpl │ │ │ │ └── api_desc_tpl.php │ │ │ ├── Loader.php │ │ │ ├── Logger.php │ │ │ ├── Logger │ │ │ │ ├── Explorer.php │ │ │ │ └── File.php │ │ │ ├── Model.php │ │ │ ├── Model │ │ │ │ └── NotORM.php │ │ │ ├── ModelProxy.php │ │ │ ├── ModelQuery.php │ │ │ ├── Request.php │ │ │ ├── Request │ │ │ │ ├── Formatter.php │ │ │ │ ├── Formatter │ │ │ │ │ ├── Array.php │ │ │ │ │ ├── Base.php │ │ │ │ │ ├── Boolean.php │ │ │ │ │ ├── Callable.php │ │ │ │ │ ├── Callback.php │ │ │ │ │ ├── Date.php │ │ │ │ │ ├── Enum.php │ │ │ │ │ ├── File.php │ │ │ │ │ ├── Float.php │ │ │ │ │ ├── Int.php │ │ │ │ │ └── String.php │ │ │ │ └── Var.php │ │ │ ├── Response.php │ │ │ ├── Response │ │ │ │ ├── Explorer.php │ │ │ │ ├── Json.php │ │ │ │ └── JsonP.php │ │ │ ├── Tool.php │ │ │ ├── Translator.php │ │ │ └── functions.php │ │ ├── Tests │ │ │ ├── Cache │ │ │ │ ├── PhalApi_Cache_APCU_Test.php │ │ │ │ ├── PhalApi_Cache_File_Test.php │ │ │ │ ├── PhalApi_Cache_Memcache_Test.php │ │ │ │ ├── PhalApi_Cache_Memcached_Test.php │ │ │ │ ├── PhalApi_Cache_Multi_Test.php │ │ │ │ ├── PhalApi_Cache_None_Test.php │ │ │ │ └── PhalApi_Cache_Redis_Test.php │ │ │ ├── Config │ │ │ │ ├── PhalApi_Config_Yaconf_Test.php │ │ │ │ ├── app.php │ │ │ │ ├── dbs.php │ │ │ │ └── sys.php │ │ │ ├── Cookie │ │ │ │ └── PhalApi_Cookie_Multi_Test.php │ │ │ ├── Crypt │ │ │ │ ├── PhalApi_Crypt_Mcrypt_Test.php │ │ │ │ ├── PhalApi_Crypt_MultiCrypt_Mcrypt_Test.php │ │ │ │ └── RSA │ │ │ │ │ ├── PhalApi_Crypt_RSA_MultiPri2Pub_Test.php │ │ │ │ │ ├── PhalApi_Crypt_RSA_MultiPub2Pri_Test.php │ │ │ │ │ └── PhalApi_Crypt_RSA_Pri2Pub_Test.php │ │ │ ├── DB │ │ │ │ └── PhalApi_DB_NotORM_Test.php │ │ │ ├── Data │ │ │ │ ├── Language │ │ │ │ │ └── zh_cn │ │ │ │ │ │ └── common.php │ │ │ │ └── phalapi_test.sql │ │ │ ├── Filter │ │ │ │ ├── PhalApi_Filter_None_Test.php │ │ │ │ └── PhalApi_Filter_SimpleMd5_Test.php │ │ │ ├── Helper │ │ │ │ ├── PhalApi_Helper_ApiDesc_Test.php │ │ │ │ ├── PhalApi_Helper_TestRunner_Test.php │ │ │ │ └── PhalApi_Helper_Tracer_Test.php │ │ │ ├── Language │ │ │ │ └── zh_cn │ │ │ │ │ └── common.php │ │ │ ├── Logger │ │ │ │ ├── PhalApi_Logger_Explorer_Test.php │ │ │ │ └── PhalApi_Logger_File_Test.php │ │ │ ├── Model │ │ │ │ └── PhalApi_Model_NotORM_Test.php │ │ │ ├── PhalApi_ApiFactory_Test.php │ │ │ ├── PhalApi_Api_Test.php │ │ │ ├── PhalApi_CUrl_Test.php │ │ │ ├── PhalApi_Config_File_Test.php │ │ │ ├── PhalApi_Cookie_Test.php │ │ │ ├── PhalApi_DI_Test.php │ │ │ ├── PhalApi_Loader_Test.php │ │ │ ├── PhalApi_ModelProxy_Test.php │ │ │ ├── PhalApi_ModelQuery_Test.php │ │ │ ├── PhalApi_Request_Test.php │ │ │ ├── PhalApi_Response_Test.php │ │ │ ├── PhalApi_Test.php │ │ │ ├── PhalApi_Tool_Test.php │ │ │ ├── PhalApi_Translator_Test.php │ │ │ ├── Request │ │ │ │ ├── Formatter │ │ │ │ │ ├── Classes │ │ │ │ │ │ ├── FormatterCallbackMyClass.php │ │ │ │ │ │ └── FormatterCallbackMyClass2.php │ │ │ │ │ ├── PhalApi_Request_Formatter_Array_Test.php │ │ │ │ │ ├── PhalApi_Request_Formatter_Boolean_Test.php │ │ │ │ │ ├── PhalApi_Request_Formatter_Callable_Test.php │ │ │ │ │ ├── PhalApi_Request_Formatter_Date_Test.php │ │ │ │ │ ├── PhalApi_Request_Formatter_Enum.php │ │ │ │ │ └── PhalApi_Request_Formatter_File_Test.php │ │ │ │ └── PhalApi_Request_Var_Test.php │ │ │ ├── phpunit.xml │ │ │ ├── test_env.php │ │ │ └── test_file_for_loader.php │ │ ├── build_code.php │ │ ├── build_sqls.php │ │ ├── build_test.php │ │ ├── phalapi-buildapp │ │ ├── phalapi-buildcode │ │ ├── phalapi-buildsqls │ │ └── phalapi-buildtest │ ├── Public │ │ ├── act │ │ │ ├── checkApiParams.php │ │ │ ├── index.php │ │ │ └── listAllApis.php │ │ ├── demo │ │ │ ├── checkApiParams.php │ │ │ ├── index.php │ │ │ └── listAllApis.php │ │ ├── index.php │ │ ├── init.php │ │ ├── install │ │ │ ├── _error.php │ │ │ ├── _footer.php │ │ │ ├── _header.php │ │ │ ├── _install.lock │ │ │ ├── _start.php │ │ │ ├── _step1.php │ │ │ ├── _step2.php │ │ │ ├── _step3.php │ │ │ ├── index.php │ │ │ └── static │ │ │ │ └── css │ │ │ │ └── pintuer.css │ │ └── shop │ │ │ ├── checkApiParams.php │ │ │ ├── cli │ │ │ ├── index.php │ │ │ ├── listAllApis.php │ │ │ ├── phprpc.php │ │ │ ├── soap.php │ │ │ ├── test_qiniu.html │ │ │ └── weixin.php │ ├── Runtime │ │ └── README.md │ ├── SDK │ │ ├── C_Sharp │ │ │ └── PhalApiClient │ │ │ │ ├── PhalApiClient.cs │ │ │ │ ├── PhalApiClientFilter.cs │ │ │ │ ├── PhalApiClientParser.cs │ │ │ │ ├── PhalApiClientParserJson.cs │ │ │ │ └── PhalApiClientResponse.cs │ │ ├── Go │ │ │ ├── PhalApiClient │ │ │ │ └── PhalApiClient.go │ │ │ └── main.go │ │ ├── JAVA │ │ │ └── net │ │ │ │ └── phalapi │ │ │ │ └── sdk │ │ │ │ ├── PhalApiClient.java │ │ │ │ ├── PhalApiClientFilter.java │ │ │ │ ├── PhalApiClientParser.java │ │ │ │ ├── PhalApiClientParserJson.java │ │ │ │ └── PhalApiClientResponse.java │ │ ├── JS │ │ │ ├── demo.html │ │ │ └── js │ │ │ │ └── SDK │ │ │ │ ├── PhalApi.js │ │ │ │ └── jquery.min.js │ │ ├── Objective-C │ │ │ ├── PhalApiClient │ │ │ │ ├── AFNPhalApiClient │ │ │ │ │ ├── AFNPhalApiClient.h │ │ │ │ │ ├── AFNPhalApiClient.m │ │ │ │ │ └── Vendor │ │ │ │ │ │ └── AFNetworking-2.6.1 │ │ │ │ │ │ ├── AFHTTPRequestOperation.h │ │ │ │ │ │ ├── AFHTTPRequestOperation.m │ │ │ │ │ │ ├── AFHTTPRequestOperationManager.h │ │ │ │ │ │ ├── AFHTTPRequestOperationManager.m │ │ │ │ │ │ ├── AFHTTPSessionManager.h │ │ │ │ │ │ ├── AFHTTPSessionManager.m │ │ │ │ │ │ ├── AFNetworkReachabilityManager.h │ │ │ │ │ │ ├── AFNetworkReachabilityManager.m │ │ │ │ │ │ ├── AFNetworking.h │ │ │ │ │ │ ├── AFSecurityPolicy.h │ │ │ │ │ │ ├── AFSecurityPolicy.m │ │ │ │ │ │ ├── AFURLConnectionOperation.h │ │ │ │ │ │ ├── AFURLConnectionOperation.m │ │ │ │ │ │ ├── AFURLRequestSerialization.h │ │ │ │ │ │ ├── AFURLRequestSerialization.m │ │ │ │ │ │ ├── AFURLResponseSerialization.h │ │ │ │ │ │ ├── AFURLResponseSerialization.m │ │ │ │ │ │ ├── AFURLSessionManager.h │ │ │ │ │ │ └── AFURLSessionManager.m │ │ │ │ ├── PhalApiClient.h │ │ │ │ ├── PhalApiClient.m │ │ │ │ ├── PhalApiClientFilter.h │ │ │ │ └── PhalApiClientFilter.m │ │ │ └── XSHttpTool │ │ │ │ ├── AFNetworking │ │ │ │ ├── AFDownloadRequestOperation │ │ │ │ │ ├── AFDownloadRequestOperation.h │ │ │ │ │ └── AFDownloadRequestOperation.m │ │ │ │ ├── AFHTTPRequestOperation.h │ │ │ │ ├── AFHTTPRequestOperation.m │ │ │ │ ├── AFHTTPRequestOperationManager.h │ │ │ │ ├── AFHTTPRequestOperationManager.m │ │ │ │ ├── AFHTTPSessionManager.h │ │ │ │ ├── AFHTTPSessionManager.m │ │ │ │ ├── AFNetworkReachabilityManager.h │ │ │ │ ├── AFNetworkReachabilityManager.m │ │ │ │ ├── AFNetworking.h │ │ │ │ ├── AFSecurityPolicy.h │ │ │ │ ├── AFSecurityPolicy.m │ │ │ │ ├── AFURLConnectionOperation.h │ │ │ │ ├── AFURLConnectionOperation.m │ │ │ │ ├── AFURLRequestSerialization.h │ │ │ │ ├── AFURLRequestSerialization.m │ │ │ │ ├── AFURLResponseSerialization.h │ │ │ │ ├── AFURLResponseSerialization.m │ │ │ │ ├── AFURLSessionManager.h │ │ │ │ ├── AFURLSessionManager.m │ │ │ │ └── UIKit+AFNetworking │ │ │ │ │ ├── AFNetworkActivityIndicatorManager.h │ │ │ │ │ ├── AFNetworkActivityIndicatorManager.m │ │ │ │ │ ├── UIActivityIndicatorView+AFNetworking.h │ │ │ │ │ ├── UIActivityIndicatorView+AFNetworking.m │ │ │ │ │ ├── UIAlertView+AFNetworking.h │ │ │ │ │ ├── UIAlertView+AFNetworking.m │ │ │ │ │ ├── UIButton+AFNetworking.h │ │ │ │ │ ├── UIButton+AFNetworking.m │ │ │ │ │ ├── UIImageView+AFNetworking.h │ │ │ │ │ ├── UIImageView+AFNetworking.m │ │ │ │ │ ├── UIKit+AFNetworking.h │ │ │ │ │ ├── UIProgressView+AFNetworking.h │ │ │ │ │ ├── UIProgressView+AFNetworking.m │ │ │ │ │ ├── UIRefreshControl+AFNetworking.h │ │ │ │ │ ├── UIRefreshControl+AFNetworking.m │ │ │ │ │ ├── UIWebView+AFNetworking.h │ │ │ │ │ └── UIWebView+AFNetworking.m │ │ │ │ ├── README.md │ │ │ │ ├── Singleton.h │ │ │ │ ├── XSHttpTool.h │ │ │ │ └── XSHttpTool.m │ │ ├── PHP │ │ │ └── PhalApiClient │ │ │ │ ├── PhalApiClient.php │ │ │ │ └── demo.php │ │ ├── Python │ │ │ └── PhalApiClient │ │ │ │ ├── RequestResult.txt │ │ │ │ ├── python2.x │ │ │ │ ├── PhalApiClient.py │ │ │ │ ├── __init__.py │ │ │ │ └── demo.py │ │ │ │ └── python3.x │ │ │ │ ├── PhalApiClient.py │ │ │ │ ├── __init__.py │ │ │ │ └── demo.py │ │ ├── React-Native │ │ │ └── PhalApi.js │ │ └── Ruby │ │ │ └── PhalApiClient │ │ │ ├── demo.rb │ │ │ ├── phalapi_client.rb │ │ │ └── tests │ │ │ ├── client.rb │ │ │ ├── client_parser_json.rb │ │ │ ├── client_response.rb │ │ │ └── run_tests │ └── Shop │ │ ├── Api │ │ ├── Comment.php │ │ ├── Cookie.php │ │ ├── Default.php │ │ ├── Goods.php │ │ ├── Pay │ │ │ └── Alipay.php │ │ ├── Statistics.php │ │ ├── Stock.php │ │ ├── User.php │ │ └── Welcome.php │ │ ├── Common │ │ ├── Crypt │ │ │ └── Base64.php │ │ ├── DB │ │ │ └── MSServer.php │ │ ├── Kernal.php │ │ ├── Logger │ │ │ └── DB.php │ │ ├── Request │ │ │ ├── Base64Data.php │ │ │ ├── Ch1.php │ │ │ ├── Email.php │ │ │ ├── PostRaw.php │ │ │ ├── Stream.php │ │ │ ├── Version.php │ │ │ └── WeiXinFilter.php │ │ └── Response │ │ │ ├── Result.php │ │ │ └── XML.php │ │ ├── Domain │ │ ├── Comment.php │ │ ├── Goods.php │ │ ├── Pay │ │ │ └── Alipay.php │ │ └── Stock.php │ │ ├── Model │ │ ├── Comment.php │ │ ├── Connector │ │ │ └── Recommend.php │ │ ├── File │ │ │ └── SiteConfig.php │ │ ├── Goods.php │ │ ├── Pay │ │ │ └── Alipay.php │ │ ├── Stock.php │ │ └── demo.php │ │ ├── ModelProxy │ │ ├── Heavy │ │ │ └── Goods.php │ │ ├── Light │ │ │ └── SiteConfig.php │ │ ├── Query │ │ │ ├── Goods.php │ │ │ ├── Recommond.php │ │ │ └── SiteConfig.php │ │ └── Realtime │ │ │ └── Recommend.php │ │ ├── Plugin │ │ └── Money.php │ │ └── Tests │ │ ├── Api │ │ ├── Api_Comment_Test.php │ │ ├── Api_Default_Test.php │ │ ├── Api_Goods_Test.php │ │ ├── Api_Welcome_Test.php │ │ └── DI_Test.php │ │ ├── Common │ │ ├── Calculator.php │ │ └── Calculator_Test.php │ │ ├── Domain │ │ ├── Domain_Comment_Test.php │ │ └── Domain_Goods_Test.php │ │ ├── Model │ │ └── Model_Comment_Test.php │ │ ├── phpunit.xml │ │ └── test_env.php └── WeTime │ ├── .gitignore │ ├── Config │ ├── app.php │ ├── dbs.php │ └── sys.php │ ├── Data │ ├── phalapi_test.sql │ └── user.sql │ ├── Demo │ ├── Api │ │ ├── Default.php │ │ └── User.php │ ├── Domain │ │ └── User.php │ ├── Model │ │ └── User.php │ ├── ModelProxy │ │ └── UserBaseInfo.php │ └── Tests │ │ ├── Api │ │ ├── Api_Default_Test.php │ │ └── Api_User_Test.php │ │ ├── Domain │ │ └── Domain_User_Test.php │ │ ├── Model │ │ └── Model_User_Test.php │ │ ├── phpunit.xml │ │ ├── phpunit_user_getbaseinfo.xml │ │ └── test_env.php │ ├── Fun │ ├── Api │ │ ├── Default.php │ │ ├── Event.php │ │ └── Resource.php │ ├── Domain │ │ ├── Event.php │ │ ├── Follow.php │ │ └── User.php │ ├── Model │ │ ├── Event.php │ │ ├── Follow.php │ │ └── User.php │ └── Tests │ │ ├── Api │ │ ├── Api_Default_Test.php │ │ └── Api_Event_Test.php │ │ ├── phpunit.xml │ │ └── test_env.php │ ├── LICENSE.md │ ├── Language │ ├── de │ │ └── common.php │ ├── en │ │ └── common.php │ ├── fr │ │ └── common.php │ ├── zh_cn │ │ └── common.php │ └── zh_tw │ │ └── common.php │ ├── Library │ ├── README.md │ └── Task │ │ ├── Config │ │ ├── app.php │ │ └── dbs.php │ │ ├── Data │ │ ├── phalapi_task_mq.sql │ │ ├── phalapi_task_progress.sql │ │ ├── task_mq.sql │ │ └── task_progress.sql │ │ ├── Lite.php │ │ ├── MQ.php │ │ ├── MQ │ │ ├── Array.php │ │ ├── DB.php │ │ ├── File.php │ │ ├── KeyValue.php │ │ ├── Memcached.php │ │ └── Redis.php │ │ ├── Progress.php │ │ ├── Progress │ │ ├── Trigger.php │ │ └── Trigger │ │ │ └── Common.php │ │ ├── Runner.php │ │ ├── Runner │ │ ├── Local.php │ │ ├── Remote.php │ │ └── Remote │ │ │ ├── Connector.php │ │ │ └── Connector │ │ │ └── Http.php │ │ ├── Task │ │ └── Model │ │ │ └── Task │ │ │ ├── TaskMq.php │ │ │ └── TaskProgress.php │ │ ├── Tests │ │ ├── MQ │ │ │ ├── Task_MQ_Array_Test.php │ │ │ ├── Task_MQ_DB_Test.php │ │ │ ├── Task_MQ_File_Test.php │ │ │ ├── Task_MQ_Memcached_Test.php │ │ │ └── Task_MQ_Redis_Test.php │ │ ├── Runner │ │ │ ├── Task_Runner_Local_Test.php │ │ │ └── Task_Runner_Remote_Test.php │ │ ├── Task_Lite_Test.php │ │ ├── Task_Progress_Test.php │ │ ├── Task_Runner_Test.php │ │ └── test_env.php │ │ ├── check.php │ │ └── crontab.php │ ├── PhalApi │ ├── Language │ │ ├── en │ │ │ └── common.php │ │ └── zh_cn │ │ │ └── common.php │ ├── NotORM │ │ ├── NotORM.php │ │ └── NotORM │ │ │ ├── Cache.php │ │ │ ├── Literal.php │ │ │ ├── MultiResult.php │ │ │ ├── Result.php │ │ │ ├── Row.php │ │ │ └── Structure.php │ ├── PhalApi.php │ ├── PhalApi │ │ ├── Api.php │ │ ├── ApiFactory.php │ │ ├── CUrl.php │ │ ├── Cache.php │ │ ├── Cache │ │ │ ├── APCU.php │ │ │ ├── File.php │ │ │ ├── Memcache.php │ │ │ ├── Memcached.php │ │ │ ├── Multi.php │ │ │ ├── None.php │ │ │ └── Redis.php │ │ ├── Config.php │ │ ├── Config │ │ │ ├── File.php │ │ │ └── Yaconf.php │ │ ├── Cookie.php │ │ ├── Cookie │ │ │ └── Multi.php │ │ ├── Crypt.php │ │ ├── Crypt │ │ │ ├── Mcrypt.php │ │ │ ├── MultiMcrypt.php │ │ │ └── RSA │ │ │ │ ├── KeyGenerator.php │ │ │ │ ├── MultiBase.php │ │ │ │ ├── MultiPri2Pub.php │ │ │ │ ├── MultiPub2Pri.php │ │ │ │ ├── Pri2Pub.php │ │ │ │ └── Pub2Pri.php │ │ ├── DB.php │ │ ├── DB │ │ │ └── NotORM.php │ │ ├── DI.php │ │ ├── Exception.php │ │ ├── Exception │ │ │ ├── BadRequest.php │ │ │ └── InternalServerError.php │ │ ├── Filter.php │ │ ├── Filter │ │ │ ├── None.php │ │ │ └── SimpleMD5.php │ │ ├── Helper │ │ │ ├── ApiDesc.php │ │ │ ├── TestRunner.php │ │ │ ├── Tracer.php │ │ │ ├── _Api.php.tpl │ │ │ ├── _Domain.php.tpl │ │ │ ├── _Model.php.tpl │ │ │ └── api_desc_tpl.php │ │ ├── Loader.php │ │ ├── Logger.php │ │ ├── Logger │ │ │ ├── Explorer.php │ │ │ └── File.php │ │ ├── Model.php │ │ ├── Model │ │ │ └── NotORM.php │ │ ├── ModelProxy.php │ │ ├── ModelQuery.php │ │ ├── Request.php │ │ ├── Request │ │ │ ├── Formatter.php │ │ │ ├── Formatter │ │ │ │ ├── Array.php │ │ │ │ ├── Base.php │ │ │ │ ├── Boolean.php │ │ │ │ ├── Callable.php │ │ │ │ ├── Callback.php │ │ │ │ ├── Date.php │ │ │ │ ├── Enum.php │ │ │ │ ├── File.php │ │ │ │ ├── Float.php │ │ │ │ ├── Int.php │ │ │ │ └── String.php │ │ │ └── Var.php │ │ ├── Response.php │ │ ├── Response │ │ │ ├── Explorer.php │ │ │ ├── Json.php │ │ │ └── JsonP.php │ │ ├── Tool.php │ │ ├── Translator.php │ │ └── functions.php │ ├── Tests │ │ ├── Cache │ │ │ ├── PhalApi_Cache_APCU_Test.php │ │ │ ├── PhalApi_Cache_File_Test.php │ │ │ ├── PhalApi_Cache_Memcache_Test.php │ │ │ ├── PhalApi_Cache_Memcached_Test.php │ │ │ ├── PhalApi_Cache_Multi_Test.php │ │ │ ├── PhalApi_Cache_None_Test.php │ │ │ └── PhalApi_Cache_Redis_Test.php │ │ ├── Config │ │ │ ├── PhalApi_Config_Yaconf_Test.php │ │ │ ├── app.php │ │ │ ├── dbs.php │ │ │ └── sys.php │ │ ├── Cookie │ │ │ └── PhalApi_Cookie_Multi_Test.php │ │ ├── Crypt │ │ │ ├── PhalApi_Crypt_Mcrypt_Test.php │ │ │ ├── PhalApi_Crypt_MultiCrypt_Mcrypt_Test.php │ │ │ └── RSA │ │ │ │ ├── PhalApi_Crypt_RSA_MultiPri2Pub_Test.php │ │ │ │ ├── PhalApi_Crypt_RSA_MultiPub2Pri_Test.php │ │ │ │ └── PhalApi_Crypt_RSA_Pri2Pub_Test.php │ │ ├── DB │ │ │ └── PhalApi_DB_NotORM_Test.php │ │ ├── Data │ │ │ ├── Language │ │ │ │ └── zh_cn │ │ │ │ │ └── common.php │ │ │ └── phalapi_test.sql │ │ ├── Filter │ │ │ ├── PhalApi_Filter_None_Test.php │ │ │ └── PhalApi_Filter_SimpleMd5_Test.php │ │ ├── Helper │ │ │ ├── PhalApi_Helper_ApiDesc_Test.php │ │ │ ├── PhalApi_Helper_TestRunner_Test.php │ │ │ └── PhalApi_Helper_Tracer_Test.php │ │ ├── Language │ │ │ └── zh_cn │ │ │ │ └── common.php │ │ ├── Logger │ │ │ ├── PhalApi_Logger_Explorer_Test.php │ │ │ └── PhalApi_Logger_File_Test.php │ │ ├── Model │ │ │ └── PhalApi_Model_NotORM_Test.php │ │ ├── PhalApi_ApiFactory_Test.php │ │ ├── PhalApi_Api_Test.php │ │ ├── PhalApi_CUrl_Test.php │ │ ├── PhalApi_Config_File_Test.php │ │ ├── PhalApi_Cookie_Test.php │ │ ├── PhalApi_DI_Test.php │ │ ├── PhalApi_Loader_Test.php │ │ ├── PhalApi_ModelProxy_Test.php │ │ ├── PhalApi_ModelQuery_Test.php │ │ ├── PhalApi_Request_Test.php │ │ ├── PhalApi_Response_Test.php │ │ ├── PhalApi_Test.php │ │ ├── PhalApi_Tool_Test.php │ │ ├── PhalApi_Translator_Test.php │ │ ├── Request │ │ │ ├── Formatter │ │ │ │ ├── Classes │ │ │ │ │ ├── FormatterCallbackMyClass.php │ │ │ │ │ └── FormatterCallbackMyClass2.php │ │ │ │ ├── PhalApi_Request_Formatter_Array_Test.php │ │ │ │ ├── PhalApi_Request_Formatter_Boolean_Test.php │ │ │ │ ├── PhalApi_Request_Formatter_Callable_Test.php │ │ │ │ ├── PhalApi_Request_Formatter_Date_Test.php │ │ │ │ ├── PhalApi_Request_Formatter_Enum.php │ │ │ │ └── PhalApi_Request_Formatter_File_Test.php │ │ │ └── PhalApi_Request_Var_Test.php │ │ ├── phpunit.xml │ │ ├── test_env.php │ │ └── test_file_for_loader.php │ ├── build_code.php │ ├── build_sqls.php │ ├── build_test.php │ ├── phalapi-buildapp │ ├── phalapi-buildcode │ ├── phalapi-buildsqls │ └── phalapi-buildtest │ ├── Public │ ├── demo │ │ ├── checkApiParams.php │ │ ├── doc │ │ │ ├── Default.Index.html │ │ │ ├── User.GetBaseInfo.html │ │ │ ├── User.GetMultiBaseInfo.html │ │ │ └── index.html │ │ ├── index.php │ │ └── listAllApis.php │ ├── fun │ │ ├── checkApiParams.php │ │ ├── index.php │ │ ├── listAllApis.php │ │ └── test_upload_img.html │ ├── index.php │ ├── init.php │ ├── install │ │ ├── _error.php │ │ ├── _footer.php │ │ ├── _header.php │ │ ├── _start.php │ │ ├── _step1.php │ │ ├── _step2.php │ │ ├── _step3.php │ │ ├── index.php │ │ └── static │ │ │ └── css │ │ │ └── pintuer.css │ └── upload │ │ └── 4bb2ec08c96a5323771b0fa8206a8114.jpg │ ├── README.md │ ├── Runtime │ └── README.md │ ├── SDK │ ├── C_Sharp │ │ └── PhalApiClient │ │ │ ├── PhalApiClient.cs │ │ │ ├── PhalApiClientFilter.cs │ │ │ ├── PhalApiClientParser.cs │ │ │ ├── PhalApiClientParserJson.cs │ │ │ └── PhalApiClientResponse.cs │ ├── Go │ │ ├── PhalApiClient │ │ │ └── PhalApiClient.go │ │ └── main.go │ ├── JAVA │ │ └── net │ │ │ └── phalapi │ │ │ └── sdk │ │ │ ├── PhalApiClient.java │ │ │ ├── PhalApiClientFilter.java │ │ │ ├── PhalApiClientParser.java │ │ │ ├── PhalApiClientParserJson.java │ │ │ └── PhalApiClientResponse.java │ ├── JS │ │ ├── demo.html │ │ └── js │ │ │ └── SDK │ │ │ ├── PhalApi.js │ │ │ └── jquery.min.js │ ├── Objective-C │ │ ├── PhalApiClient │ │ │ ├── AFNPhalApiClient │ │ │ │ ├── AFNPhalApiClient.h │ │ │ │ ├── AFNPhalApiClient.m │ │ │ │ └── Vendor │ │ │ │ │ └── AFNetworking-2.6.1 │ │ │ │ │ ├── AFHTTPRequestOperation.h │ │ │ │ │ ├── AFHTTPRequestOperation.m │ │ │ │ │ ├── AFHTTPRequestOperationManager.h │ │ │ │ │ ├── AFHTTPRequestOperationManager.m │ │ │ │ │ ├── AFHTTPSessionManager.h │ │ │ │ │ ├── AFHTTPSessionManager.m │ │ │ │ │ ├── AFNetworkReachabilityManager.h │ │ │ │ │ ├── AFNetworkReachabilityManager.m │ │ │ │ │ ├── AFNetworking.h │ │ │ │ │ ├── AFSecurityPolicy.h │ │ │ │ │ ├── AFSecurityPolicy.m │ │ │ │ │ ├── AFURLConnectionOperation.h │ │ │ │ │ ├── AFURLConnectionOperation.m │ │ │ │ │ ├── AFURLRequestSerialization.h │ │ │ │ │ ├── AFURLRequestSerialization.m │ │ │ │ │ ├── AFURLResponseSerialization.h │ │ │ │ │ ├── AFURLResponseSerialization.m │ │ │ │ │ ├── AFURLSessionManager.h │ │ │ │ │ └── AFURLSessionManager.m │ │ │ ├── PhalApiClient.h │ │ │ ├── PhalApiClient.m │ │ │ ├── PhalApiClientFilter.h │ │ │ └── PhalApiClientFilter.m │ │ └── XSHttpTool │ │ │ ├── AFNetworking │ │ │ ├── AFDownloadRequestOperation │ │ │ │ ├── AFDownloadRequestOperation.h │ │ │ │ └── AFDownloadRequestOperation.m │ │ │ ├── AFHTTPRequestOperation.h │ │ │ ├── AFHTTPRequestOperation.m │ │ │ ├── AFHTTPRequestOperationManager.h │ │ │ ├── AFHTTPRequestOperationManager.m │ │ │ ├── AFHTTPSessionManager.h │ │ │ ├── AFHTTPSessionManager.m │ │ │ ├── AFNetworkReachabilityManager.h │ │ │ ├── AFNetworkReachabilityManager.m │ │ │ ├── AFNetworking.h │ │ │ ├── AFSecurityPolicy.h │ │ │ ├── AFSecurityPolicy.m │ │ │ ├── AFURLConnectionOperation.h │ │ │ ├── AFURLConnectionOperation.m │ │ │ ├── AFURLRequestSerialization.h │ │ │ ├── AFURLRequestSerialization.m │ │ │ ├── AFURLResponseSerialization.h │ │ │ ├── AFURLResponseSerialization.m │ │ │ ├── AFURLSessionManager.h │ │ │ ├── AFURLSessionManager.m │ │ │ └── UIKit+AFNetworking │ │ │ │ ├── AFNetworkActivityIndicatorManager.h │ │ │ │ ├── AFNetworkActivityIndicatorManager.m │ │ │ │ ├── UIActivityIndicatorView+AFNetworking.h │ │ │ │ ├── UIActivityIndicatorView+AFNetworking.m │ │ │ │ ├── UIAlertView+AFNetworking.h │ │ │ │ ├── UIAlertView+AFNetworking.m │ │ │ │ ├── UIButton+AFNetworking.h │ │ │ │ ├── UIButton+AFNetworking.m │ │ │ │ ├── UIImageView+AFNetworking.h │ │ │ │ ├── UIImageView+AFNetworking.m │ │ │ │ ├── UIKit+AFNetworking.h │ │ │ │ ├── UIProgressView+AFNetworking.h │ │ │ │ ├── UIProgressView+AFNetworking.m │ │ │ │ ├── UIRefreshControl+AFNetworking.h │ │ │ │ ├── UIRefreshControl+AFNetworking.m │ │ │ │ ├── UIWebView+AFNetworking.h │ │ │ │ └── UIWebView+AFNetworking.m │ │ │ ├── README.md │ │ │ ├── Singleton.h │ │ │ ├── XSHttpTool.h │ │ │ └── XSHttpTool.m │ ├── PHP │ │ └── PhalApiClient │ │ │ ├── PhalApiClient.php │ │ │ └── demo.php │ ├── Python │ │ └── PhalApiClient │ │ │ ├── RequestResult.txt │ │ │ ├── python2.x │ │ │ ├── PhalApiClient.py │ │ │ ├── __init__.py │ │ │ └── demo.py │ │ │ └── python3.x │ │ │ ├── PhalApiClient.py │ │ │ ├── __init__.py │ │ │ └── demo.py │ ├── React-Native │ │ └── PhalApi.js │ └── Ruby │ │ └── PhalApiClient │ │ ├── demo.rb │ │ ├── phalapi_client.rb │ │ └── tests │ │ ├── client.rb │ │ ├── client_parser_json.rb │ │ ├── client_response.rb │ │ └── run_tests │ ├── composer.json │ └── logo.jpg └── template.md /README.md: -------------------------------------------------------------------------------- 1 | # 初识PhalApi —— 探索接口服务开发的技艺 2 | 《初识PhalApi —— 探索接口服务开发的技艺》是一本关于介绍开源框架PhalApi使用的电子书。 3 | 4 | ## 本书所使用的环境 5 | 6 | + PHP 5.3.10 7 | + Nginx 1.1.19 8 | + PhalApi 1.4.0 9 | + Ubuntu 12.04(64位) 10 | 11 | ## 版权许可 12 | 本作品采用[知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议](https://creativecommons.org/licenses/by-nc-sa/3.0/)进行许可。 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /chapter1.md: -------------------------------------------------------------------------------- 1 | # 第一部分 探索 2 | 3 | 第一部分介绍的是PhalApi的基础内容,以及高级主题,最后还会讲述除了编码部分,其他的主题。这一部分,我们将探索如何使用PhalApi进行项目开发,从对PhalApi的感性认识,再到细致的基础开发,最后深入到核心的思想和理念。 -------------------------------------------------------------------------------- /chapter2.md: -------------------------------------------------------------------------------- 1 | # 第二部分 2 | 3 | 第二部分,我们会一起来讲解三个不同项目的开发,一个是全新的创业项目,从0到1,开发一套全新的接口服务,属于基本的项目开发,适合于初学者,因此难免会在一些不合理的实现(出于教学目的有意识这样安排,但对于不合理的实现会进行相关的温馨提示);一个是重写历史遗留项目,并且在这基础上实现添加新的接口服务,属于有一定难度的项目开发,适合有经验的开发人员;最后一个是针对大型项目的极致接口服务开发,这其中采用的技术涉及面广,适合高级或资深的开发人员。 4 | 5 | 而这三个项目都是基于真实项目开发总结改编而来的,有参考借鉴的意义。对于初级开发工程师来说,通过了解不同背景下的接口服务项目开发,可以在不用花一年甚至更长的时间就能丰富对项目开发的理解,避免在后续实际开发过程中走弯路。对于中级开发工程师来说,可以结合自身过往参与的项目经验,对比这三个项目的开发过程,对如何提高开发效率、降低项目风险也有一定的启发性。最后对于高级或资深的开发工程师,或以略过前面两个项目,集中了解最后极致的项目开发,因为大型的项目开发要求更细致的把控。 -------------------------------------------------------------------------------- /chapter3.md: -------------------------------------------------------------------------------- 1 | # 第三部分 再进一步 2 | 3 | 前面已经介绍了PhalApi的基础使用的高级主题,也讲解了三个具有代表性的项目案例,这本书也逐渐进入尾声。接下来,让我们更进一步,深入了解PhalApi内部的核心设计、性能情况和代码质量等。同时,一起探讨如何设计一个接口框架,以及在中国如何参与开源社区。理解这些,可能对于开发项目没有直接实际的帮助,但对于软件开发这条路来说却意义非凡。 -------------------------------------------------------------------------------- /images/ch-1-api-install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-1-api-install.png -------------------------------------------------------------------------------- /images/ch-1-demo-default-api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-1-demo-default-api.png -------------------------------------------------------------------------------- /images/ch-1-installation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-1-installation.png -------------------------------------------------------------------------------- /images/ch-1-pic-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-1-pic-1.png -------------------------------------------------------------------------------- /images/ch-1-shop-default-api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-1-shop-default-api.png -------------------------------------------------------------------------------- /images/ch-1-shop-project.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-1-shop-project.png -------------------------------------------------------------------------------- /images/ch-1-shop-welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-1-shop-welcome.png -------------------------------------------------------------------------------- /images/ch-1-welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-1-welcome.png -------------------------------------------------------------------------------- /images/ch-10-md-html.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-10-md-html.jpg -------------------------------------------------------------------------------- /images/ch-10-stars.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-10-stars.jpg -------------------------------------------------------------------------------- /images/ch-2-api-domain-model-call.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-2-api-domain-model-call.png -------------------------------------------------------------------------------- /images/ch-2-co-ho-hco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-2-co-ho-hco.png -------------------------------------------------------------------------------- /images/ch-2-compare-data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-2-compare-data.png -------------------------------------------------------------------------------- /images/ch-2-goods-snapshot-docs-exception.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-2-goods-snapshot-docs-exception.png -------------------------------------------------------------------------------- /images/ch-2-goods-snapshot-docs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-2-goods-snapshot-docs.png -------------------------------------------------------------------------------- /images/ch-2-hua-xue-fang-cheng-si-like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-2-hua-xue-fang-cheng-si-like.png -------------------------------------------------------------------------------- /images/ch-2-logger-interface.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-2-logger-interface.png -------------------------------------------------------------------------------- /images/ch-2-micro-service.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-2-micro-service.jpg -------------------------------------------------------------------------------- /images/ch-2-model-proxy-full.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-2-model-proxy-full.jpg -------------------------------------------------------------------------------- /images/ch-2-model-proxy-lite.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-2-model-proxy-lite.jpg -------------------------------------------------------------------------------- /images/ch-2-multi-cache.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-2-multi-cache.jpg -------------------------------------------------------------------------------- /images/ch-2-ret-happen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-2-ret-happen.jpg -------------------------------------------------------------------------------- /images/ch-2-xiang-xian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-2-xiang-xian.png -------------------------------------------------------------------------------- /images/ch-3-buildapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-buildapp.png -------------------------------------------------------------------------------- /images/ch-3-buildsql.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-buildsql.png -------------------------------------------------------------------------------- /images/ch-3-buildtest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-buildtest.png -------------------------------------------------------------------------------- /images/ch-3-check-goods-snapshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-check-goods-snapshot.png -------------------------------------------------------------------------------- /images/ch-3-java-sdk.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-java-sdk.jpg -------------------------------------------------------------------------------- /images/ch-3-list-all-apis-welcome-say.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-list-all-apis-welcome-say.png -------------------------------------------------------------------------------- /images/ch-3-list-all-apis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-list-all-apis.png -------------------------------------------------------------------------------- /images/ch-3-pear-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-pear-map.png -------------------------------------------------------------------------------- /images/ch-3-phalapi-buildcode.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-phalapi-buildcode.jpg -------------------------------------------------------------------------------- /images/ch-3-qiniu-cdn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-qiniu-cdn.jpg -------------------------------------------------------------------------------- /images/ch-3-stock-go.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-stock-go.jpg -------------------------------------------------------------------------------- /images/ch-3-task-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-task-1.jpg -------------------------------------------------------------------------------- /images/ch-3-task-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-task-2.jpg -------------------------------------------------------------------------------- /images/ch-3-task-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-task-3.jpg -------------------------------------------------------------------------------- /images/ch-3-task-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-task-4.jpg -------------------------------------------------------------------------------- /images/ch-3-task-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-task-5.jpg -------------------------------------------------------------------------------- /images/ch-3-uml-di.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-uml-di.jpg -------------------------------------------------------------------------------- /images/ch-3-wechat-red-pack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-wechat-red-pack.jpg -------------------------------------------------------------------------------- /images/ch-3-wechat-uml.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-3-wechat-uml.jpg -------------------------------------------------------------------------------- /images/ch-4-comment-get-id-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-4-comment-get-id-1.jpg -------------------------------------------------------------------------------- /images/ch-4-comment-get-online-doc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-4-comment-get-online-doc.jpg -------------------------------------------------------------------------------- /images/ch-4-phalapi-coverage-html.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-4-phalapi-coverage-html.jpg -------------------------------------------------------------------------------- /images/ch-4-refactoring-pattern-tdd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-4-refactoring-pattern-tdd.png -------------------------------------------------------------------------------- /images/ch-4-tdd-purpose.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-4-tdd-purpose.jpg -------------------------------------------------------------------------------- /images/ch-4-tree-decision.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-4-tree-decision.jpg -------------------------------------------------------------------------------- /images/ch-5-adm-space.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-5-adm-space.jpg -------------------------------------------------------------------------------- /images/ch-5-android-user-center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-5-android-user-center.png -------------------------------------------------------------------------------- /images/ch-5-coverage-event.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-5-coverage-event.jpg -------------------------------------------------------------------------------- /images/ch-5-coverage-line.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-5-coverage-line.jpg -------------------------------------------------------------------------------- /images/ch-5-db-er.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-5-db-er.png -------------------------------------------------------------------------------- /images/ch-5-ios-p1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-5-ios-p1.jpg -------------------------------------------------------------------------------- /images/ch-5-ios-user-center.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-5-ios-user-center.jpg -------------------------------------------------------------------------------- /images/ch-5-list-apis-fun.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-5-list-apis-fun.jpg -------------------------------------------------------------------------------- /images/ch-5-manager-event-post.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-5-manager-event-post.jpg -------------------------------------------------------------------------------- /images/ch-5-manager-user.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-5-manager-user.jpg -------------------------------------------------------------------------------- /images/ch-5-wetime-func.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-5-wetime-func.jpg -------------------------------------------------------------------------------- /images/ch-6-api.v2.family.com_1_50_with_cache.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-6-api.v2.family.com_1_50_with_cache.png -------------------------------------------------------------------------------- /images/ch-6-api.v2.family.com_1_50_without_cache.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-6-api.v2.family.com_1_50_without_cache.png -------------------------------------------------------------------------------- /images/ch-6-apis-list-manual.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-6-apis-list-manual.png -------------------------------------------------------------------------------- /images/ch-6-app-start-up.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-6-app-start-up.jpg -------------------------------------------------------------------------------- /images/ch-6-group-join.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-6-group-join.jpg -------------------------------------------------------------------------------- /images/ch-6-hui-dian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-6-hui-dian.png -------------------------------------------------------------------------------- /images/ch-6-person-draw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-6-person-draw.png -------------------------------------------------------------------------------- /images/ch-6-run-tests.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-6-run-tests.jpg -------------------------------------------------------------------------------- /images/ch-6-weight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-6-weight.png -------------------------------------------------------------------------------- /images/ch-6-xhprof-callgraph-pdo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-6-xhprof-callgraph-pdo.jpg -------------------------------------------------------------------------------- /images/ch-6-xhprof-callgraph.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-6-xhprof-callgraph.jpg -------------------------------------------------------------------------------- /images/ch-6-xhprof-no-cache.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-6-xhprof-no-cache.jpg -------------------------------------------------------------------------------- /images/ch-7-user-login.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-7-user-login.jpg -------------------------------------------------------------------------------- /images/ch-8-ab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-8-ab.png -------------------------------------------------------------------------------- /images/ch-8-cva.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-8-cva.jpg -------------------------------------------------------------------------------- /images/ch-8-instability-abstract.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-8-instability-abstract.png -------------------------------------------------------------------------------- /images/ch-8-phpmetrics-old.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-8-phpmetrics-old.jpg -------------------------------------------------------------------------------- /images/ch-8-phpmetrics.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-8-phpmetrics.jpg -------------------------------------------------------------------------------- /images/ch-8-phpunit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-8-phpunit.jpg -------------------------------------------------------------------------------- /images/ch-8-sonar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-8-sonar.jpg -------------------------------------------------------------------------------- /images/ch-8-uml-class-relation.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-8-uml-class-relation.jpg -------------------------------------------------------------------------------- /images/ch-8-workflow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-8-workflow.jpg -------------------------------------------------------------------------------- /images/ch-8-xhprof.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-8-xhprof.png -------------------------------------------------------------------------------- /images/ch-9-lavarel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-9-lavarel.jpg -------------------------------------------------------------------------------- /images/ch-9-phpunit-comparator.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-9-phpunit-comparator.jpg -------------------------------------------------------------------------------- /images/ch-9-phpunit-exception.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-9-phpunit-exception.jpg -------------------------------------------------------------------------------- /images/ch-9-phpunit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/ch-9-phpunit.jpg -------------------------------------------------------------------------------- /images/feed_week_recipe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/images/feed_week_recipe.jpg -------------------------------------------------------------------------------- /src/Family-2.0/.gitattributes: -------------------------------------------------------------------------------- 1 | *.h linguist-language=PHP 2 | *.m linguist-language=PHP -------------------------------------------------------------------------------- /src/Family-2.0/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # 排除IDE项目文件 3 | .settings 4 | .settings/* 5 | .buildpath 6 | .project 7 | 8 | # 日记文件 9 | *.log 10 | 11 | # 临时文件 12 | *.bak 13 | *.swp 14 | 15 | *.dat 16 | *.zip 17 | *.tar 18 | 19 | .DS_Store 20 | *.DS_Store 21 | 22 | .idea 23 | 24 | # 离线文档 25 | Public/*/doc/ 26 | 27 | -------------------------------------------------------------------------------- /src/Family-2.0/Apps/Fami/Api/Group.php: -------------------------------------------------------------------------------- 1 | array( 8 | 'groupId' => array('name' => 'group_id', 'require' => true), 9 | ), 10 | ); 11 | } 12 | 13 | public function getGroupInfo() { 14 | $rs = array('code' => Common_Def::CODE_OK, 'msg' => ''); 15 | 16 | $domain = new Domain_Group(); 17 | $rs['info'] = $domain->getGroupInfoByGroupId($this->groupId); 18 | 19 | return $rs; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/Family-2.0/Apps/Fami/Common/Def.php: -------------------------------------------------------------------------------- 1 | getGroupInfoByGroupId($groupId); 8 | return $row; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/Family-2.0/Apps/Fami/Tests/test_env.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Fami'); 12 | 13 | //日记纪录 - Explorer 14 | DI()->logger = new PhalApi_Logger_Explorer( 15 | PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR); 16 | 17 | -------------------------------------------------------------------------------- /src/Family-2.0/Apps/Scale/Tests/test_env.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Scale'); 12 | 13 | //日记纪录 - Explorer 14 | DI()->logger = new PhalApi_Logger_Explorer( 15 | PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR); 16 | 17 | -------------------------------------------------------------------------------- /src/Family-2.0/Apps/Task/TMyTrigger/WeekPush.php: -------------------------------------------------------------------------------- 1 | notorm->suser 12 | ->select('user_id') 13 | ->where('type', 1) 14 | ->where('height > ?', 0) 15 | ->where('weight > ?', 0); 16 | } 17 | 18 | protected function getService() { 19 | return 'Nutrition_SWeek.Push'; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/Family-2.0/Apps/Task/Tests/test_env.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Task'); 12 | 13 | //日记纪录 - Explorer 14 | DI()->logger = new PhalApi_Logger_Explorer( 15 | PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR); 16 | 17 | -------------------------------------------------------------------------------- /src/Family-2.0/Config/app.php: -------------------------------------------------------------------------------- 1 | array( 12 | //'sign' => array('name' => 'sign', 'require' => true), 13 | ), 14 | 15 | /** 16 | * 接口服务白名单,格式:接口服务类名.接口服务方法名 17 | * 18 | * 示例: 19 | * - *.* 通配,全部接口服务,慎用! 20 | * - Default.* Api_Default接口类的全部方法 21 | * - *.Index 全部接口类的Index方法 22 | * - Default.Index 指定某个接口服务,即Api_Default::Index() 23 | */ 24 | 'service_whitelist' => array( 25 | 'Default.Index', 26 | ), 27 | ); 28 | -------------------------------------------------------------------------------- /src/Family-2.0/Config/sys.php: -------------------------------------------------------------------------------- 1 | false, 11 | 12 | /** 13 | * MC缓存服务器参考配置 14 | */ 15 | 'mc' => array( 16 | 'host' => '127.0.0.1', 17 | 'port' => 11211, 18 | ), 19 | 20 | /** 21 | * 加密 22 | */ 23 | 'crypt' => array( 24 | 'mcrypt_iv' => '12345678', //8位 25 | ), 26 | ); 27 | -------------------------------------------------------------------------------- /src/Family-2.0/Data/feed_comments.sql: -------------------------------------------------------------------------------- 1 | `feed_id` bigint(20) DEFAULT '0', 2 | `user_id` bigint(20) DEFAULT '0' COMMENT '发布评论的用户ID', 3 | `message` text COMMENT '评论内容', 4 | `to_comment_id` bigint(20) DEFAULT '0' COMMENT '针对评论的回复,为0时表示对动态评论', 5 | `to_user_id` bigint(20) DEFAULT '0' COMMENT '被评论者的用户id', 6 | `dateline` int(11) DEFAULT '0' COMMENT '评论的时间戳', 7 | -------------------------------------------------------------------------------- /src/Family-2.0/Data/group.sql: -------------------------------------------------------------------------------- 1 | 2 | `user_id` bigint(20) DEFAULT '0' COMMENT '创建者的用户ID', 3 | `number` varchar(10) DEFAULT '0000' COMMENT '家庭号', 4 | `groupname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '家庭组名称', 5 | `password` varchar(64) DEFAULT '' COMMENT '密码', 6 | `amount` int(11) DEFAULT '0' COMMENT '群组的成员数量', 7 | `create_date` timestamp NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '创建日期', 8 | `type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'all' COMMENT '家庭群的类型', 9 | `is_delete` tinyint(1) DEFAULT '0' COMMENT '是否已删除,0否,1删除', -------------------------------------------------------------------------------- /src/Family-2.0/Data/phalapi_test.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `phalapi`.`tbl_user` ( 2 | `id` INT NOT NULL, 3 | `name` VARCHAR(45) NULL, 4 | `note` VARCHAR(45) NULL, 5 | PRIMARY KEY (`id`)); 6 | 7 | 8 | INSERT INTO `phalapi`.`tbl_user` (`id`, `name`, `note`) VALUES ('1', 'dogstar', 'oschina'); 9 | 10 | -------------------------------------------------------------------------------- /src/Family-2.0/Data/sweight.sql: -------------------------------------------------------------------------------- 1 | 2 | `user_id` bigint(20) DEFAULT NULL, 3 | `weight` int(7) DEFAULT '0' COMMENT '体重(单位用g)', 4 | `report_date` int(11) DEFAULT '0' COMMENT '体重上报时间戳', 5 | `type` tinyint(2) DEFAULT '0' COMMENT '体重阶段:0普通人/产前,1孕妇,2抱婴(产后)', 6 | `baby_position` tinyint(4) DEFAULT '0' COMMENT '宝宝的位置,1老大,2老二,3老三(为0时表示不是宝宝的体重)', 7 | `report_short_date` varchar(8) DEFAULT '' COMMENT '短的日期,格式如:20150501', 8 | `cur_day_position` smallint(3) DEFAULT '1' COMMENT '当天上报第几次上报', -------------------------------------------------------------------------------- /src/Family-2.0/Data/user.sql: -------------------------------------------------------------------------------- 1 | `name` VARCHAR(45) NULL, 2 | `note` VARCHAR(45) NULL, 3 | -------------------------------------------------------------------------------- /src/Family-2.0/Demo/ModelProxy/UserBaseInfo.php: -------------------------------------------------------------------------------- 1 | 2015-02-22 4 | */ 5 | 6 | class ModelProxy_UserBaseInfo extends PhalApi_ModelProxy { 7 | 8 | protected function doGetData($query) { 9 | $model = new Model_User(); 10 | 11 | return $model->getByUserId($query->id); 12 | } 13 | 14 | protected function getKey($query) { 15 | return 'userbaseinfo_' . $query->id; 16 | } 17 | 18 | protected function getExpire($query) { 19 | return 600; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/Family-2.0/Demo/Tests/test_env.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Demo'); 12 | 13 | //日记纪录 - Explorer 14 | DI()->logger = new PhalApi_Logger_Explorer( 15 | PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR); 16 | 17 | -------------------------------------------------------------------------------- /src/Family-2.0/LICENSE.md: -------------------------------------------------------------------------------- 1 | ##协议许可的权利 - GPL协议 2 | 3 | PhalApi官方网站为 http://www.phalapi.net,依法独立拥有 PhalApi 及官网发布的PhalApi衍生产品著作权。 4 | PhalApi及其衍生产品著作权受到法律和国际公约保护。使用者需仔细阅读本协议,在理解、同意、并遵守本协 5 | 议的全部条款后,方可开始使用 PhalApi及其衍生 软件。 6 | 7 | 本授权协议适用于 http://www.phalapi.net 发布的所有应用程序,PhalApi官方网站拥有对本授权协议的最终 8 | 解释权。 9 | 10 | PhalApi是一个PHP轻量级开源接口框架,并承诺永久免费!请放心使用! -------------------------------------------------------------------------------- /src/Family-2.0/Language/de/common.php: -------------------------------------------------------------------------------- 1 | '{name}Hallo, Willkommen PhalApi!', 8 | 'user not exists' => 'Der nutzer gibt es nicht', 9 | ); 10 | -------------------------------------------------------------------------------- /src/Family-2.0/Language/en/common.php: -------------------------------------------------------------------------------- 1 | 'Hello {name}, Welcome to use PhalApi!', 5 | 'user not exists' => 'user not exists', 6 | ); 7 | -------------------------------------------------------------------------------- /src/Family-2.0/Language/fr/common.php: -------------------------------------------------------------------------------- 1 | '{name}Bonjour, bienvenue PhalApi!', 6 | 'user not exists' => "L'utilisateur n'existe pas", 7 | ); 8 | -------------------------------------------------------------------------------- /src/Family-2.0/Language/zh_cn/common.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 9 | */ 10 | 11 | return array( 12 | 'Hi {name}, welcome to use PhalApi!' => '{name}您好,欢迎使用PhalApi!', 13 | 'user not exists' => '用户不存在', 14 | ); 15 | -------------------------------------------------------------------------------- /src/Family-2.0/Language/zh_tw/common.php: -------------------------------------------------------------------------------- 1 | '{name}您好,歡迎使用PhalApi!', 5 | 'user not exists' => '用戶不存在', 6 | ); 7 | -------------------------------------------------------------------------------- /src/Family-2.0/Library/README.md: -------------------------------------------------------------------------------- 1 | ##扩展类库 2 | 3 | 请查看: 4 | 5 | ``` 6 | http://git.oschina.net/dogstar/PhalApi-Library 7 | ``` -------------------------------------------------------------------------------- /src/Family-2.0/Library/Task/Config/dbs.php: -------------------------------------------------------------------------------- 1 | array( 6 | 7 | //请将以下配置拷贝到 ./Config/dbs.php 文件对应的位置中,未配置的表将使用默认路由 8 | 9 | //10张表,可根据需要,自行调整表前缀、主键名和路由 10 | 'task_mq' => array( 11 | 'prefix' => 'phalapi_', 12 | 'key' => 'id', 13 | 'map' => array( 14 | array('db' => 'db_demo'), 15 | array('start' => 0, 'end' => 9, 'db' => 'db_demo'), 16 | ), 17 | ), 18 | ) 19 | ); 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/Family-2.0/Library/Task/Data/task_mq.sql: -------------------------------------------------------------------------------- 1 | `service` varchar(200) DEFAULT '' COMMENT '接口服务名称', 2 | `params` text COMMENT 'json格式的参数', 3 | `create_time` int(11) DEFAULT '0', 4 | -------------------------------------------------------------------------------- /src/Family-2.0/Library/Task/Data/task_progress.sql: -------------------------------------------------------------------------------- 1 | `title` varchar(200) DEFAULT '' COMMENT '任务标题', 2 | `trigger_class` varchar(50) DEFAULT '' COMMENT '触发器类名', 3 | `fire_params` varchar(255) DEFAULT '' COMMENT '需要传递的参数,格式自定', 4 | `interval_time` int(11) DEFAULT '0' COMMENT '执行间隔,单位:秒', 5 | `enable` tinyint(1) DEFAULT '1' COMMENT '是否启动,1启动,0禁止', 6 | `result` varchar(255) DEFAULT '' COMMENT '运行的结果,以json格式保存', 7 | `state` tinyint(1) DEFAULT '0' COMMENT '进程状态,0空闲,1运行中,-1异常退出', 8 | `last_fire_time` int(11) DEFAULT '0' COMMENT '上一次运行时间', 9 | -------------------------------------------------------------------------------- /src/Family-2.0/Library/Task/MQ.php: -------------------------------------------------------------------------------- 1 | 20150516 8 | */ 9 | 10 | interface Task_MQ { 11 | 12 | /** 13 | * 单个添加 14 | * @param string $service 接口服务名称,如:Default.Index 15 | * @param array $params 接口服务参数 16 | */ 17 | public function add($service, $params = array()); 18 | 19 | /** 20 | * 批量弹出 21 | * @param string $service 需要获取的接口服务名称 22 | * @param int $num 弹出的个数 23 | */ 24 | public function pop($service, $num = 1); 25 | } 26 | -------------------------------------------------------------------------------- /src/Family-2.0/Library/Task/MQ/DB.php: -------------------------------------------------------------------------------- 1 | 20150516 8 | */ 9 | 10 | class Task_MQ_DB implements Task_MQ { 11 | 12 | public function add($service, $params = array()) { 13 | $model = new Model_Task_TaskMq(); 14 | return $model->add($service, $params); 15 | } 16 | 17 | public function pop($service, $num = 1) { 18 | $model = new Model_Task_TaskMq(); 19 | return $model->pop($service, $num); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/Family-2.0/Library/Task/Progress/Trigger.php: -------------------------------------------------------------------------------- 1 | 20150520 6 | */ 7 | 8 | interface Task_Progress_Trigger { 9 | 10 | /** 11 | * 进程的具体操作 12 | * @param string $params 对应数据库表task_progress.fire_params字段 13 | */ 14 | public function fire($params); 15 | } 16 | -------------------------------------------------------------------------------- /src/Family-2.0/Library/Task/Runner/Remote/Connector/Http.php: -------------------------------------------------------------------------------- 1 | get('curl', 'PhalApi_CUrl'); 7 | 8 | return $curl->post($url, $data, $timeoutMs); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/Family-2.0/Library/Task/Tests/test_env.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Demo'); 8 | DI()->loader->addDirs('Library'); 9 | DI()->loader->addDirs('./Library/Task/Task'); 10 | 11 | DI()->logger = new PhalApi_Logger_Explorer( 12 | PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR); 13 | 14 | SL('en'); 15 | -------------------------------------------------------------------------------- /src/Family-2.0/Library/Task/crontab.php: -------------------------------------------------------------------------------- 1 | loader->addDirs(array('Demo', 'Library', 'Library/Task/Task')); 6 | 7 | try { 8 | $progress = new Task_Progress(); 9 | $progress->run(); 10 | } catch (Exception $ex) { 11 | echo $ex->getMessage(); 12 | echo "\n\n"; 13 | echo $ex->getTraceAsString(); 14 | // notify ... 15 | } 16 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/NotORM/NotORM/Literal.php: -------------------------------------------------------------------------------- 1 | value = $value; 18 | $this->parameters = func_get_args(); 19 | array_shift($this->parameters); 20 | } 21 | 22 | /** Get literal value 23 | * @return string 24 | */ 25 | function __toString() { 26 | return $this->value; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/PhalApi/Cache/None.php: -------------------------------------------------------------------------------- 1 | 2015-02-04 9 | */ 10 | 11 | class PhalApi_Cache_None implements PhalApi_Cache { 12 | 13 | public function set($key, $value, $expire = 600) { 14 | } 15 | 16 | public function get($key) { 17 | return NULL; 18 | } 19 | 20 | public function delete($key) { 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/PhalApi/DB.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 11 | */ 12 | interface PhalApi_DB{ 13 | 14 | public function connect(); 15 | 16 | public function disconnect(); 17 | } 18 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/PhalApi/Exception.php: -------------------------------------------------------------------------------- 1 | 2014-10-02 11 | */ 12 | 13 | class PhalApi_Exception extends Exception { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/PhalApi/Exception/BadRequest.php: -------------------------------------------------------------------------------- 1 | 2015-02-05 11 | */ 12 | 13 | class PhalApi_Exception_BadRequest extends PhalApi_Exception{ 14 | 15 | public function __construct($message, $code = 0) { 16 | parent::__construct( 17 | T('Bad Request: {message}', array('message' => $message)), 400 + $code 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/PhalApi/Exception/InternalServerError.php: -------------------------------------------------------------------------------- 1 | 2015-02-05 9 | */ 10 | 11 | class PhalApi_Exception_InternalServerError extends PhalApi_Exception { 12 | 13 | public function __construct($message, $code = 0) { 14 | parent::__construct( 15 | T('Interal Server Error: {message}', array('message' => $message)), 500 + $code 16 | ); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/PhalApi/Filter/None.php: -------------------------------------------------------------------------------- 1 | 2015-10-23 9 | */ 10 | 11 | class PhalApi_Filter_None implements PhalApi_Filter { 12 | 13 | public function check() { 14 | // nothing here ... 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/PhalApi/Helper/_Domain.php.tpl: -------------------------------------------------------------------------------- 1 | 2015-11-07 9 | */ 10 | 11 | interface PhalApi_Request_Formatter { 12 | 13 | public function parse($value, $rule); 14 | } 15 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/PhalApi/Request/Formatter/Callback.php: -------------------------------------------------------------------------------- 1 | 2017-04-19 12 | */ 13 | 14 | 15 | class PhalApi_Request_Formatter_Callback extends PhalApi_Request_Formatter_Callable { 16 | } 17 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/PhalApi/Response/Explorer.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 9 | */ 10 | 11 | class PhalApi_Response_Explorer extends PhalApi_Response { 12 | 13 | protected function formatResult($result) { 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/PhalApi/Response/Json.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 9 | */ 10 | 11 | class PhalApi_Response_Json extends PhalApi_Response { 12 | 13 | public function __construct() { 14 | $this->addHeaders('Content-Type', 'application/json;charset=utf-8'); 15 | } 16 | 17 | protected function formatResult($result) { 18 | return json_encode($result); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/Tests/Config/app.php: -------------------------------------------------------------------------------- 1 | array( 5 | 'from' => array('name' => 'from', 'default' => 'phpunit'), 6 | ), 7 | 8 | /** 9 | * 接口服务白名单,格式:接口服务类名.接口服务方法名 10 | * 11 | * 示例: 12 | * - *.* 通配,全部接口服务,慎用! 13 | * - Default.* Api_Default接口类的全部方法 14 | * - *.Index 全部接口类的Index方法 15 | * - Default.Index 指定某个接口服务,即Api_Default::Index() 16 | */ 17 | 'service_whitelist' => array( 18 | '*.Index', 19 | 'ServiceWhitelist.PoPo', 20 | ), 21 | ); 22 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/Tests/Config/sys.php: -------------------------------------------------------------------------------- 1 | false, 5 | ); 6 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/Tests/Data/Language/zh_cn/common.php: -------------------------------------------------------------------------------- 1 | 'this is a good way', 5 | ); 6 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/Tests/Language/zh_cn/common.php: -------------------------------------------------------------------------------- 1 | '{name}您好,欢迎使用PhalApi!', 12 | 'user not exists' => '用户不存在', 13 | '{0} I love you' => '{0} 我爱你', 14 | '{0} I love you because {1}' => '{0} 我爱你因为{1}', 15 | ); 16 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/Tests/Request/Formatter/Classes/FormatterCallbackMyClass.php: -------------------------------------------------------------------------------- 1 | 'Hello PhpUnit'); 3 | -------------------------------------------------------------------------------- /src/Family-2.0/PhalApi/phalapi-buildcode: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | loader->addDirs('Demo'); 10 | 11 | /** ---------------- 响应接口请求 ---------------- **/ 12 | 13 | $api = new PhalApi(); 14 | $rs = $api->response(); 15 | $rs->output(); 16 | 17 | -------------------------------------------------------------------------------- /src/Family-2.0/Public/index.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Demo'); 10 | 11 | /** ---------------- 响应接口请求 ---------------- **/ 12 | 13 | $api = new PhalApi(); 14 | $rs = $api->response(); 15 | $rs->output(); 16 | 17 | -------------------------------------------------------------------------------- /src/Family-2.0/Public/install/_footer.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/Family-2.0/Public/scale/index.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Apps/Scale'); 10 | 11 | /** ---------------- 响应接口请求 ---------------- **/ 12 | 13 | $api = new PhalApi(); 14 | $rs = $api->response(); 15 | $rs->output(); 16 | 17 | -------------------------------------------------------------------------------- /src/Family-2.0/Runtime/README.md: -------------------------------------------------------------------------------- 1 | Hey guys, logs file here! 2 | 3 | 出现日志文件不存在或无内容,请检查/Runtime目录是否有写入权限。 -------------------------------------------------------------------------------- /src/Family-2.0/SDK/C_Sharp/PhalApiClient/PhalApiClientFilter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace PhalApiClientSDK 7 | { 8 | /** 9 | * 接口过滤器 10 | * 11 | * - 可用于接口签名生成 12 | */ 13 | public interface PhalApiClientFilter { 14 | 15 | /** 16 | * 过滤操作 17 | * @param string service 接口服务名称 18 | * @param Map params 接口参数,注意是引用。可以直接修改 19 | * @return null 20 | */ 21 | void filter(String service, Dictionary paramsList); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/Family-2.0/SDK/C_Sharp/PhalApiClient/PhalApiClientParser.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace PhalApiClientSDK 7 | { 8 | /** 9 | * 接口结果解析器 10 | * 11 | * - 可用于不同接口返回格式的处理 12 | */ 13 | public interface PhalApiClientParser 14 | { 15 | 16 | /** 17 | * 结果解析 18 | * @param String apiResult 19 | * @return PhalApiClientResponse 20 | */ 21 | PhalApiClientResponse parse(String apiResult); 22 | } 23 | 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/Family-2.0/SDK/Go/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "./PhalApiClient" 5 | "fmt" 6 | "net/url" 7 | ) 8 | 9 | func main() { 10 | rs, err := PhalApiClient.NewRequest(). 11 | WithHost(`http://127.0.0.1/PhalApi/Public/index.php`). 12 | WithService("Default.index"). 13 | WithParams(url.Values{}). 14 | Get() 15 | if err != nil { 16 | fmt.Println(err.Error()) 17 | } else { 18 | fmt.Println("code------------------------", rs.Code) 19 | fmt.Println("data------------------------", rs.Data) 20 | fmt.Println("msg------------------------", rs.Msg) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/Family-2.0/SDK/JAVA/net/phalapi/sdk/PhalApiClientFilter.java: -------------------------------------------------------------------------------- 1 | package net.phalapi.sdk; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 接口过滤器 7 | * 8 | * - 可用于接口签名生成 9 | */ 10 | public interface PhalApiClientFilter { 11 | 12 | /** 13 | * 过滤操作 14 | * @param string service 接口服务名称 15 | * @param Map params 接口参数,注意是引用。可以直接修改 16 | * @return null 17 | */ 18 | public void filter(String service, Map params); 19 | } 20 | -------------------------------------------------------------------------------- /src/Family-2.0/SDK/JAVA/net/phalapi/sdk/PhalApiClientParser.java: -------------------------------------------------------------------------------- 1 | package net.phalapi.sdk; 2 | 3 | /** 4 | * 接口结果解析器 5 | * 6 | * - 可用于不同接口返回格式的处理 7 | */ 8 | public interface PhalApiClientParser { 9 | 10 | /** 11 | * 结果解析 12 | * @param String apiResult 13 | * @return PhalApiClientResponse 14 | */ 15 | public PhalApiClientResponse parse(String apiResult); 16 | } 17 | 18 | -------------------------------------------------------------------------------- /src/Family-2.0/SDK/Objective-C/PhalApiClient/AFNPhalApiClient/AFNPhalApiClient.h: -------------------------------------------------------------------------------- 1 | // 2 | // AFNPhalApiClient.h 3 | // PhalApiClientDemo 4 | // 5 | // Created by Aevit on 15/10/18. 6 | // Copyright © 2015年 Aevit. All rights reserved. 7 | // 8 | 9 | #import "PhalApiClient.h" 10 | #import "AFHTTPRequestOperationManager.h" 11 | 12 | @interface AFNPhalApiClient : PhalApiClient 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /src/Family-2.0/SDK/Objective-C/PhalApiClient/PhalApiClientFilter.h: -------------------------------------------------------------------------------- 1 | // 2 | // PhalApiClientFilter.h 3 | // PhalApiClientDemo 4 | // 5 | // Created by Aevit on 15/10/18. 6 | // Copyright © 2015年 Aevit. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PhalApiClientFilter : NSObject 12 | 13 | /** 14 | * 接口过滤器 15 | * 可用于接口签名生成 16 | * 17 | * @param service 接口服务名称 18 | * @param params 接口参数,注意是mutable变量,可以直接修改 19 | */ 20 | - (void)filter:(NSString*)service params:(NSMutableDictionary*)params; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /src/Family-2.0/SDK/Objective-C/PhalApiClient/PhalApiClientFilter.m: -------------------------------------------------------------------------------- 1 | // 2 | // PhalApiClientFilter.m 3 | // PhalApiClientDemo 4 | // 5 | // Created by Aevit on 15/10/18. 6 | // Copyright © 2015年 Aevit. All rights reserved. 7 | // 8 | 9 | #import "PhalApiClientFilter.h" 10 | 11 | @implementation PhalApiClientFilter 12 | 13 | /** 14 | * 接口过滤器 15 | * 可用于接口签名生成 16 | * 17 | * @param service 接口服务名称 18 | * @param params 接口参数,注意是mutable变量,可以直接修改 19 | */ 20 | - (void)filter:(NSString*)service params:(NSMutableDictionary*)params { 21 | // 在此对接口进行过滤 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /src/Family-2.0/SDK/Objective-C/XSHttpTool/Singleton.h: -------------------------------------------------------------------------------- 1 | // .h 2 | #define singleton_interface(class) + (instancetype)shared##class; 3 | 4 | // .m 5 | #define singleton_implementation(class) \ 6 | static class *_instance; \ 7 | \ 8 | + (id)allocWithZone:(struct _NSZone *)zone \ 9 | { \ 10 | static dispatch_once_t onceToken; \ 11 | dispatch_once(&onceToken, ^{ \ 12 | _instance = [super allocWithZone:zone]; \ 13 | }); \ 14 | \ 15 | return _instance; \ 16 | } \ 17 | \ 18 | + (instancetype)shared##class \ 19 | { \ 20 | if (_instance == nil) { \ 21 | _instance = [[class alloc] init]; \ 22 | } \ 23 | \ 24 | return _instance; \ 25 | } 26 | 27 | -------------------------------------------------------------------------------- /src/Family-2.0/SDK/Python/PhalApiClient/python2.x/PhalApiClient.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | #gaoyiping (iam@gaoyiping.com) 2017-02-18 3 | import json, urllib, urllib2 4 | 5 | def PhalApiClient(host, service = None, params = None, timeout = None): 6 | url = host + ('' if service is None else ('?service=' + service)) 7 | if params is not None: 8 | assert type(params) is dict, 'params type must be dict' 9 | assert params, 'params must is valid values' 10 | params = urllib.urlencode(params) 11 | request = urllib2.Request(url) 12 | response = urllib2.urlopen(request, data = params, timeout = timeout) 13 | return {'info': response.info(), 'state': response.getcode(), 'data': json.loads(response.read())} -------------------------------------------------------------------------------- /src/Family-2.0/SDK/Python/PhalApiClient/python2.x/__init__.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | #gaoyiping (iam@gaoyiping.com) 2017-02-18 -------------------------------------------------------------------------------- /src/Family-2.0/SDK/Python/PhalApiClient/python3.x/__init__.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | #gaoyiping (iam@gaoyiping.com) 2017-02-18 -------------------------------------------------------------------------------- /src/Family-2.0/SDK/Ruby/PhalApiClient/tests/client_response.rb: -------------------------------------------------------------------------------- 1 | require_relative '../phalapi_client' 2 | require 'test/unit' 3 | 4 | class ClientResponseTest < Test::Unit::TestCase 5 | def test_new 6 | a_response = PhalApi::ClientResponse.new(400) 7 | assert_equal 400, a_response.ret 8 | 9 | a_response = PhalApi::ClientResponse.new(500, [], 'Server Error') 10 | assert_equal 500, a_response.ret 11 | assert_equal [], a_response.data 12 | assert_equal 'Server Error', a_response.msg 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /src/Family-2.0/SDK/Ruby/PhalApiClient/tests/run_tests: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ruby ./client_response.rb 4 | 5 | ruby ./client_parser_json.rb 6 | 7 | ruby ./client.rb 8 | -------------------------------------------------------------------------------- /src/Family-2.0/Scale/Tests/test_env.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Scale'); 12 | 13 | //日记纪录 - Explorer 14 | DI()->logger = new PhalApi_Logger_Explorer( 15 | PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR); 16 | 17 | -------------------------------------------------------------------------------- /src/Family-2.0/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "phalapi/phalapi", 3 | "description": "A light-weight framework focus on how to develop API faster and simple.", 4 | "keywords": ["api"], 5 | "homepage": "http://www.phalapi.net", 6 | "license" : "GPL", 7 | "authors": [ 8 | { 9 | "name": "Dogstar Huang", 10 | "email": "chanzonghuang@gmail.com", 11 | "homepage" : "http://my.oschina.net/dogstar", 12 | "role": "Developer" 13 | } 14 | ], 15 | "require": { 16 | "php": ">=5.3.3", 17 | "another-vendor/package": "1.2.0" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Family-2.0/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/src/Family-2.0/logo.jpg -------------------------------------------------------------------------------- /src/Family-2.0/sh/api.v2.family.com_1_50_with_cache.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/src/Family-2.0/sh/api.v2.family.com_1_50_with_cache.png -------------------------------------------------------------------------------- /src/Family-2.0/sh/api.v2.family.com_1_50_without_cache.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/src/Family-2.0/sh/api.v2.family.com_1_50_without_cache.png -------------------------------------------------------------------------------- /src/Forever/Config/sys.php: -------------------------------------------------------------------------------- 1 | false, 11 | 12 | /** 13 | * MC缓存服务器参考配置 14 | */ 15 | 'mc' => array( 16 | 'host' => '127.0.0.1', 17 | 'port' => 11211, 18 | ), 19 | 20 | /** 21 | * 加密 22 | */ 23 | 'crypt' => array( 24 | 'mcrypt_iv' => '12345678', //8位 25 | ), 26 | ); 27 | -------------------------------------------------------------------------------- /src/Forever/Data/demo.sql: -------------------------------------------------------------------------------- 1 | `name` varchar(11) DEFAULT NULL, 2 | -------------------------------------------------------------------------------- /src/Forever/Data/phalapi_test.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `phalapi_test`.`tbl_user` ( 2 | `id` INT NOT NULL, 3 | `name` VARCHAR(45) NULL, 4 | `note` VARCHAR(45) NULL, 5 | PRIMARY KEY (`id`)); 6 | 7 | 8 | INSERT INTO `phalapi_test`.`tbl_user` (`id`, `name`, `note`) VALUES ('1', 'dogstar', 'oschina'); 9 | 10 | -------------------------------------------------------------------------------- /src/Forever/Data/user.sql: -------------------------------------------------------------------------------- 1 | `name` VARCHAR(45) NULL, 2 | `note` VARCHAR(45) NULL, 3 | -------------------------------------------------------------------------------- /src/Forever/Demo/Api/User/Check.php: -------------------------------------------------------------------------------- 1 | config->get('sys.crypt.mcrypt_iv'); 10 | $this->mcrypt = new PhalApi_Crypt_MultiMcrypt($iv); 11 | } 12 | 13 | public function encrypt($pass) { 14 | return $this->mcrypt->encrypt($pass, self::CRYPT_KEY); 15 | } 16 | 17 | public function decrypt($encryptPass) { 18 | return $this->mcrypt->decrypt($encryptPass, self::CRYPT_KEY); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Forever/Demo/Domain/User.php: -------------------------------------------------------------------------------- 1 | encrypt($pass); 8 | 9 | $model = new Model_User(); 10 | return $model->login($user, $encryptPass); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/Forever/Demo/Tests/test_env.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Demo'); 12 | 13 | //日记纪录 - Explorer 14 | DI()->logger = new PhalApi_Logger_Explorer( 15 | PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR); 16 | 17 | -------------------------------------------------------------------------------- /src/Forever/LICENSE.md: -------------------------------------------------------------------------------- 1 | ##协议许可的权利 - GPL协议 2 | 3 | PhalApi官方网站为 http://www.phalapi.net,依法独立拥有 PhalApi 及官网发布的PhalApi衍生产品著作权。 4 | PhalApi及其衍生产品著作权受到法律和国际公约保护。使用者需仔细阅读本协议,在理解、同意、并遵守本协 5 | 议的全部条款后,方可开始使用 PhalApi及其衍生 软件。 6 | 7 | 本授权协议适用于 http://www.phalapi.net 发布的所有应用程序,PhalApi官方网站拥有对本授权协议的最终 8 | 解释权。 9 | 10 | PhalApi是一个PHP轻量级开源接口框架,并承诺永久免费!请放心使用! -------------------------------------------------------------------------------- /src/Forever/Language/de/common.php: -------------------------------------------------------------------------------- 1 | '{name}Hallo, Willkommen PhalApi!', 8 | 'user not exists' => 'Der nutzer gibt es nicht', 9 | ); 10 | -------------------------------------------------------------------------------- /src/Forever/Language/en/common.php: -------------------------------------------------------------------------------- 1 | 'Hello {name}, Welcome to use PhalApi!', 5 | 'user not exists' => 'user not exists', 6 | ); 7 | -------------------------------------------------------------------------------- /src/Forever/Language/fr/common.php: -------------------------------------------------------------------------------- 1 | '{name}Bonjour, bienvenue PhalApi!', 6 | 'user not exists' => "L'utilisateur n'existe pas", 7 | ); 8 | -------------------------------------------------------------------------------- /src/Forever/Language/jp/common.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 9 | */ 10 | 11 | return array( 12 | 'Hi {name}, welcome to use PhalApi!' => '{name}您好,欢迎使用PhalApi!', 13 | 'user not exists' => '用户不存在', 14 | ); 15 | -------------------------------------------------------------------------------- /src/Forever/Language/zh_tw/common.php: -------------------------------------------------------------------------------- 1 | '{name}您好,歡迎使用PhalApi!', 5 | 'user not exists' => '用戶不存在', 6 | ); 7 | -------------------------------------------------------------------------------- /src/Forever/Library/FastRoute/FastRoute/.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | php: 4 | - 5.4 5 | - 5.5 6 | - 5.6 7 | - 7.0 8 | - hhvm 9 | 10 | matrix: 11 | allow_failures: 12 | - php: 7.0 13 | -------------------------------------------------------------------------------- /src/Forever/Library/FastRoute/FastRoute/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nikic/fast-route", 3 | "description": "Fast request router for PHP", 4 | "keywords": ["routing", "router"], 5 | "license": "BSD-3-Clause", 6 | "authors": [ 7 | { 8 | "name": "Nikita Popov", 9 | "email": "nikic@php.net" 10 | } 11 | ], 12 | "require": { 13 | "php": ">=5.4.0" 14 | }, 15 | "autoload": { 16 | "psr-4": { 17 | "FastRoute\\": "src/" 18 | }, 19 | "files": ["src/functions.php"] 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/Forever/Library/FastRoute/FastRoute/src/BadRouteException.php: -------------------------------------------------------------------------------- 1 | markTestSkipped('PHP 5.6 required for MARK support'); 10 | } 11 | } 12 | 13 | protected function getDispatcherClass() { 14 | return 'FastRoute\\Dispatcher\\MarkBased'; 15 | } 16 | 17 | protected function getDataGeneratorClass() { 18 | return 'FastRoute\\DataGenerator\\MarkBased'; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Forever/Library/FastRoute/FastRoute/test/bootstrap.php: -------------------------------------------------------------------------------- 1 | output(); 7 | exit(0); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/Forever/Library/FastRoute/Language/zh_cn/common.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 9 | */ 10 | 11 | return array( 12 | 'FastRoute Method Not Allowed, It Should be: {methods}' => '快速路由的HTTP请求方法错误,应该为:{methods}', 13 | ); 14 | -------------------------------------------------------------------------------- /src/Forever/Library/PHPRPC/check.php: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | [POST data]\n"; 6 | die(); 7 | } 8 | $url = $argv[1]; 9 | $params = array(); 10 | if (isset($argv[2])) { 11 | parse_str($argv[2], $params); 12 | } 13 | 14 | require_once dirname(__FILE__) . '/phprpc/phprpc_client.php'; 15 | 16 | $client = new PHPRPC_Client(); 17 | $client->setProxy(NULL); 18 | $client->useService($url); 19 | $client->setKeyLength(1000); 20 | $client->setEncryptMode(3); 21 | $client->setCharset('UTF-8'); 22 | $client->setTimeout(10); 23 | 24 | var_dump($client->response(json_encode($params))); 25 | 26 | -------------------------------------------------------------------------------- /src/Forever/Library/Qiniu/qiniu/conf.php: -------------------------------------------------------------------------------- 1 | '; 18 | $QINIU_SECRET_KEY = ''; 19 | 20 | -------------------------------------------------------------------------------- /src/Forever/Library/Qiniu/qiniu/utils.php: -------------------------------------------------------------------------------- 1 | array( 9 | 'wsdl' => NULL, 10 | 'options' => array( 11 | 'uri' => 'http://localhost/demo/soap.php', 12 | 'port' => NULL, 13 | ), 14 | ), 15 | ); 16 | -------------------------------------------------------------------------------- /src/Forever/Library/SOAP/Lite.php: -------------------------------------------------------------------------------- 1 | config->get('app.SOAP'); 12 | 13 | $server = new SOAPServer( 14 | $config['wsdl'], 15 | $config['options'] 16 | ); 17 | 18 | $server->setClass('SOAP_PhalApi'); 19 | return $server->handle(); 20 | } catch (SOAPFault $f) { 21 | DI()->logger->error('SAOPFault', $f->faultstring); 22 | return FALSE; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/Forever/Library/Task/Config/dbs.php: -------------------------------------------------------------------------------- 1 | array( 6 | 7 | //请将以下配置拷贝到 ./Config/dbs.php 文件对应的位置中,未配置的表将使用默认路由 8 | 9 | //10张表,可根据需要,自行调整表前缀、主键名和路由 10 | 'task_mq' => array( 11 | 'prefix' => 'phalapi_', 12 | 'key' => 'id', 13 | 'map' => array( 14 | array('db' => 'db_demo'), 15 | array('start' => 0, 'end' => 9, 'db' => 'db_demo'), 16 | ), 17 | ), 18 | ) 19 | ); 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/Forever/Library/Task/Data/task_mq.sql: -------------------------------------------------------------------------------- 1 | `service` varchar(200) DEFAULT '' COMMENT '接口服务名称', 2 | `params` text COMMENT 'json格式的参数', 3 | `create_time` int(11) DEFAULT '0', 4 | -------------------------------------------------------------------------------- /src/Forever/Library/Task/Data/task_progress.sql: -------------------------------------------------------------------------------- 1 | `title` varchar(200) DEFAULT '' COMMENT '任务标题', 2 | `trigger_class` varchar(50) DEFAULT '' COMMENT '触发器类名', 3 | `fire_params` varchar(255) DEFAULT '' COMMENT '需要传递的参数,格式自定', 4 | `interval_time` int(11) DEFAULT '0' COMMENT '执行间隔,单位:秒', 5 | `enable` tinyint(1) DEFAULT '1' COMMENT '是否启动,1启动,0禁止', 6 | `result` varchar(255) DEFAULT '' COMMENT '运行的结果,以json格式保存', 7 | `state` tinyint(1) DEFAULT '0' COMMENT '进程状态,0空闲,1运行中,-1异常退出', 8 | `last_fire_time` int(11) DEFAULT '0' COMMENT '上一次运行时间', 9 | -------------------------------------------------------------------------------- /src/Forever/Library/Task/MQ.php: -------------------------------------------------------------------------------- 1 | 20150516 8 | */ 9 | 10 | interface Task_MQ { 11 | 12 | /** 13 | * 单个添加 14 | * @param string $service 接口服务名称,如:Default.Index 15 | * @param array $params 接口服务参数 16 | */ 17 | public function add($service, $params = array()); 18 | 19 | /** 20 | * 批量弹出 21 | * @param string $service 需要获取的接口服务名称 22 | * @param int $num 弹出的个数 23 | */ 24 | public function pop($service, $num = 1); 25 | } 26 | -------------------------------------------------------------------------------- /src/Forever/Library/Task/MQ/DB.php: -------------------------------------------------------------------------------- 1 | 20150516 8 | */ 9 | 10 | class Task_MQ_DB implements Task_MQ { 11 | 12 | public function add($service, $params = array()) { 13 | $model = new Model_Task_TaskMq(); 14 | return $model->add($service, $params); 15 | } 16 | 17 | public function pop($service, $num = 1) { 18 | $model = new Model_Task_TaskMq(); 19 | return $model->pop($service, $num); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/Forever/Library/Task/Progress/Trigger.php: -------------------------------------------------------------------------------- 1 | 20150520 6 | */ 7 | 8 | interface Task_Progress_Trigger { 9 | 10 | /** 11 | * 进程的具体操作 12 | * @param string $params 对应数据库表task_progress.fire_params字段 13 | */ 14 | public function fire($params); 15 | } 16 | -------------------------------------------------------------------------------- /src/Forever/Library/Task/Runner/Remote/Connector/Http.php: -------------------------------------------------------------------------------- 1 | get('curl', 'PhalApi_CUrl'); 7 | 8 | return $curl->post($url, $data, $timeoutMs); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/Forever/Library/Task/Tests/test_env.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Demo'); 8 | DI()->loader->addDirs('Library'); 9 | DI()->loader->addDirs('./Library/Task/Task'); 10 | 11 | DI()->logger = new PhalApi_Logger_Explorer( 12 | PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR); 13 | 14 | SL('en'); 15 | -------------------------------------------------------------------------------- /src/Forever/Library/Task/crontab.php: -------------------------------------------------------------------------------- 1 | loader->addDirs(array('Demo', 'Library', 'Library/Task/Task')); 6 | 7 | try { 8 | $progress = new Task_Progress(); 9 | $progress->run(); 10 | } catch (Exception $ex) { 11 | echo $ex->getMessage(); 12 | echo "\n\n"; 13 | echo $ex->getTraceAsString(); 14 | // notify ... 15 | } 16 | -------------------------------------------------------------------------------- /src/Forever/Library/Wechat/OutMessage/Image.php: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | "; 15 | 16 | return sprintf($template, $this->mediaId); 17 | } 18 | 19 | public function setMediaId($mediaId) 20 | { 21 | $this->mediaId = $mediaId; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/Forever/Library/Wechat/OutMessage/Text.php: -------------------------------------------------------------------------------- 1 | 10 | "; 11 | 12 | return sprintf($template, $this->content); 13 | } 14 | 15 | public function setContent($content) 16 | { 17 | $this->content = $content; 18 | return $this; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Forever/Library/Wechat/OutMessage/Voice.php: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | "; 13 | 14 | return sprintf($template, $this->mediaId); 15 | } 16 | 17 | public function setMediaId($mediaId) 18 | { 19 | $this->mediaId = $mediaId; 20 | return $this; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/Forever/Library/Wechat/Plugin/DeviceEvent.php: -------------------------------------------------------------------------------- 1 | value = $value; 18 | $this->parameters = func_get_args(); 19 | array_shift($this->parameters); 20 | } 21 | 22 | /** Get literal value 23 | * @return string 24 | */ 25 | function __toString() { 26 | return $this->value; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/PhalApi/Cache/None.php: -------------------------------------------------------------------------------- 1 | 2015-02-04 9 | */ 10 | 11 | class PhalApi_Cache_None implements PhalApi_Cache { 12 | 13 | public function set($key, $value, $expire = 600) { 14 | } 15 | 16 | public function get($key) { 17 | return NULL; 18 | } 19 | 20 | public function delete($key) { 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/PhalApi/DB.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 11 | */ 12 | interface PhalApi_DB{ 13 | 14 | public function connect(); 15 | 16 | public function disconnect(); 17 | } 18 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/PhalApi/Exception.php: -------------------------------------------------------------------------------- 1 | 2014-10-02 11 | */ 12 | 13 | class PhalApi_Exception extends Exception { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/PhalApi/Exception/BadRequest.php: -------------------------------------------------------------------------------- 1 | 2015-02-05 11 | */ 12 | 13 | class PhalApi_Exception_BadRequest extends PhalApi_Exception{ 14 | 15 | public function __construct($message, $code = 0) { 16 | parent::__construct( 17 | T('Bad Request: {message}', array('message' => $message)), 400 + $code 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/PhalApi/Exception/InternalServerError.php: -------------------------------------------------------------------------------- 1 | 2015-02-05 9 | */ 10 | 11 | class PhalApi_Exception_InternalServerError extends PhalApi_Exception { 12 | 13 | public function __construct($message, $code = 0) { 14 | parent::__construct( 15 | T('Interal Server Error: {message}', array('message' => $message)), 500 + $code 16 | ); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/PhalApi/Filter/None.php: -------------------------------------------------------------------------------- 1 | 2015-10-23 9 | */ 10 | 11 | class PhalApi_Filter_None implements PhalApi_Filter { 12 | 13 | public function check() { 14 | // nothing here ... 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/PhalApi/Helper/_Domain.php.tpl: -------------------------------------------------------------------------------- 1 | 2015-11-07 9 | */ 10 | 11 | interface PhalApi_Request_Formatter { 12 | 13 | public function parse($value, $rule); 14 | } 15 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/PhalApi/Request/Formatter/Callback.php: -------------------------------------------------------------------------------- 1 | 2017-04-19 12 | */ 13 | 14 | 15 | class PhalApi_Request_Formatter_Callback extends PhalApi_Request_Formatter_Callable { 16 | } 17 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/PhalApi/Response/Explorer.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 9 | */ 10 | 11 | class PhalApi_Response_Explorer extends PhalApi_Response { 12 | 13 | protected function formatResult($result) { 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/PhalApi/Response/Json.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 9 | */ 10 | 11 | class PhalApi_Response_Json extends PhalApi_Response { 12 | 13 | public function __construct() { 14 | $this->addHeaders('Content-Type', 'application/json;charset=utf-8'); 15 | } 16 | 17 | protected function formatResult($result) { 18 | return json_encode($result); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/Tests/Config/app.php: -------------------------------------------------------------------------------- 1 | array( 5 | 'from' => array('name' => 'from', 'default' => 'phpunit'), 6 | ), 7 | 8 | /** 9 | * 接口服务白名单,格式:接口服务类名.接口服务方法名 10 | * 11 | * 示例: 12 | * - *.* 通配,全部接口服务,慎用! 13 | * - Default.* Api_Default接口类的全部方法 14 | * - *.Index 全部接口类的Index方法 15 | * - Default.Index 指定某个接口服务,即Api_Default::Index() 16 | */ 17 | 'service_whitelist' => array( 18 | '*.Index', 19 | 'ServiceWhitelist.PoPo', 20 | ), 21 | ); 22 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/Tests/Config/sys.php: -------------------------------------------------------------------------------- 1 | false, 5 | ); 6 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/Tests/Data/Language/zh_cn/common.php: -------------------------------------------------------------------------------- 1 | 'this is a good way', 5 | ); 6 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/Tests/Language/zh_cn/common.php: -------------------------------------------------------------------------------- 1 | '{name}您好,欢迎使用PhalApi!', 12 | 'user not exists' => '用户不存在', 13 | '{0} I love you' => '{0} 我爱你', 14 | '{0} I love you because {1}' => '{0} 我爱你因为{1}', 15 | ); 16 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/Tests/Request/Formatter/Classes/FormatterCallbackMyClass.php: -------------------------------------------------------------------------------- 1 | 'Hello PhpUnit'); 3 | -------------------------------------------------------------------------------- /src/Forever/PhalApi/phalapi-buildcode: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | loader->addDirs(array('Demo')); 10 | 11 | DI()->request = 'Common_Request'; 12 | DI()->response = 'Common_Response'; 13 | 14 | /** ---------------- 响应接口请求 ---------------- **/ 15 | 16 | $api = new PhalApi(); 17 | $rs = $api->response(); 18 | $rs->output(); 19 | 20 | -------------------------------------------------------------------------------- /src/Forever/Public/index.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Demo'); 10 | 11 | /** ---------------- 响应接口请求 ---------------- **/ 12 | 13 | $api = new PhalApi(); 14 | $rs = $api->response(); 15 | $rs->output(); 16 | 17 | -------------------------------------------------------------------------------- /src/Forever/Public/install/_footer.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |

©2015-2017 PhalApi All Rights Reserved. 粤ICP备15028808号

5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/Forever/Public/install/_install.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/src/Forever/Public/install/_install.lock -------------------------------------------------------------------------------- /src/Forever/Runtime/README.md: -------------------------------------------------------------------------------- 1 | Hey guys, logs file here! 2 | 3 | 出现日志文件不存在或无内容,请检查/Runtime目录是否有写入权限。 -------------------------------------------------------------------------------- /src/Forever/SDK/C_Sharp/PhalApiClient/PhalApiClientFilter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace PhalApiClientSDK 7 | { 8 | /** 9 | * 接口过滤器 10 | * 11 | * - 可用于接口签名生成 12 | */ 13 | public interface PhalApiClientFilter { 14 | 15 | /** 16 | * 过滤操作 17 | * @param string service 接口服务名称 18 | * @param Map params 接口参数,注意是引用。可以直接修改 19 | * @return null 20 | */ 21 | void filter(String service, Dictionary paramsList); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/Forever/SDK/C_Sharp/PhalApiClient/PhalApiClientParser.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace PhalApiClientSDK 7 | { 8 | /** 9 | * 接口结果解析器 10 | * 11 | * - 可用于不同接口返回格式的处理 12 | */ 13 | public interface PhalApiClientParser 14 | { 15 | 16 | /** 17 | * 结果解析 18 | * @param String apiResult 19 | * @return PhalApiClientResponse 20 | */ 21 | PhalApiClientResponse parse(String apiResult); 22 | } 23 | 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/Forever/SDK/Go/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "./PhalApiClient" 5 | "fmt" 6 | "net/url" 7 | ) 8 | 9 | func main() { 10 | rs, err := PhalApiClient.NewRequest(). 11 | WithHost(`http://127.0.0.1/PhalApi/Public/index.php`). 12 | WithService("Default.index"). 13 | WithParams(url.Values{}). 14 | Get() 15 | if err != nil { 16 | fmt.Println(err.Error()) 17 | } else { 18 | fmt.Println("code------------------------", rs.Code) 19 | fmt.Println("data------------------------", rs.Data) 20 | fmt.Println("msg------------------------", rs.Msg) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/Forever/SDK/JAVA/net/phalapi/sdk/PhalApiClientFilter.java: -------------------------------------------------------------------------------- 1 | package net.phalapi.sdk; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 接口过滤器 7 | * 8 | * - 可用于接口签名生成 9 | */ 10 | public interface PhalApiClientFilter { 11 | 12 | /** 13 | * 过滤操作 14 | * @param string service 接口服务名称 15 | * @param Map params 接口参数,注意是引用。可以直接修改 16 | * @return null 17 | */ 18 | public void filter(String service, Map params); 19 | } 20 | -------------------------------------------------------------------------------- /src/Forever/SDK/JAVA/net/phalapi/sdk/PhalApiClientParser.java: -------------------------------------------------------------------------------- 1 | package net.phalapi.sdk; 2 | 3 | /** 4 | * 接口结果解析器 5 | * 6 | * - 可用于不同接口返回格式的处理 7 | */ 8 | public interface PhalApiClientParser { 9 | 10 | /** 11 | * 结果解析 12 | * @param String apiResult 13 | * @return PhalApiClientResponse 14 | */ 15 | public PhalApiClientResponse parse(String apiResult); 16 | } 17 | 18 | -------------------------------------------------------------------------------- /src/Forever/SDK/Objective-C/PhalApiClient/AFNPhalApiClient/AFNPhalApiClient.h: -------------------------------------------------------------------------------- 1 | // 2 | // AFNPhalApiClient.h 3 | // PhalApiClientDemo 4 | // 5 | // Created by Aevit on 15/10/18. 6 | // Copyright © 2015年 Aevit. All rights reserved. 7 | // 8 | 9 | #import "PhalApiClient.h" 10 | #import "AFHTTPRequestOperationManager.h" 11 | 12 | @interface AFNPhalApiClient : PhalApiClient 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /src/Forever/SDK/Objective-C/PhalApiClient/PhalApiClientFilter.h: -------------------------------------------------------------------------------- 1 | // 2 | // PhalApiClientFilter.h 3 | // PhalApiClientDemo 4 | // 5 | // Created by Aevit on 15/10/18. 6 | // Copyright © 2015年 Aevit. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PhalApiClientFilter : NSObject 12 | 13 | /** 14 | * 接口过滤器 15 | * 可用于接口签名生成 16 | * 17 | * @param service 接口服务名称 18 | * @param params 接口参数,注意是mutable变量,可以直接修改 19 | */ 20 | - (void)filter:(NSString*)service params:(NSMutableDictionary*)params; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /src/Forever/SDK/Objective-C/PhalApiClient/PhalApiClientFilter.m: -------------------------------------------------------------------------------- 1 | // 2 | // PhalApiClientFilter.m 3 | // PhalApiClientDemo 4 | // 5 | // Created by Aevit on 15/10/18. 6 | // Copyright © 2015年 Aevit. All rights reserved. 7 | // 8 | 9 | #import "PhalApiClientFilter.h" 10 | 11 | @implementation PhalApiClientFilter 12 | 13 | /** 14 | * 接口过滤器 15 | * 可用于接口签名生成 16 | * 17 | * @param service 接口服务名称 18 | * @param params 接口参数,注意是mutable变量,可以直接修改 19 | */ 20 | - (void)filter:(NSString*)service params:(NSMutableDictionary*)params { 21 | // 在此对接口进行过滤 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /src/Forever/SDK/Objective-C/XSHttpTool/Singleton.h: -------------------------------------------------------------------------------- 1 | // .h 2 | #define singleton_interface(class) + (instancetype)shared##class; 3 | 4 | // .m 5 | #define singleton_implementation(class) \ 6 | static class *_instance; \ 7 | \ 8 | + (id)allocWithZone:(struct _NSZone *)zone \ 9 | { \ 10 | static dispatch_once_t onceToken; \ 11 | dispatch_once(&onceToken, ^{ \ 12 | _instance = [super allocWithZone:zone]; \ 13 | }); \ 14 | \ 15 | return _instance; \ 16 | } \ 17 | \ 18 | + (instancetype)shared##class \ 19 | { \ 20 | if (_instance == nil) { \ 21 | _instance = [[class alloc] init]; \ 22 | } \ 23 | \ 24 | return _instance; \ 25 | } 26 | 27 | -------------------------------------------------------------------------------- /src/Forever/SDK/Python/PhalApiClient/python2.x/PhalApiClient.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | #gaoyiping (iam@gaoyiping.com) 2017-02-18 3 | import json, urllib, urllib2 4 | 5 | def PhalApiClient(host, service = None, params = None, timeout = None): 6 | url = host + ('' if service is None else ('?service=' + service)) 7 | if params is not None: 8 | assert type(params) is dict, 'params type must be dict' 9 | assert params, 'params must is valid values' 10 | params = urllib.urlencode(params) 11 | request = urllib2.Request(url) 12 | response = urllib2.urlopen(request, data = params, timeout = timeout) 13 | return {'info': response.info(), 'state': response.getcode(), 'data': json.loads(response.read())} -------------------------------------------------------------------------------- /src/Forever/SDK/Python/PhalApiClient/python2.x/__init__.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | #gaoyiping (iam@gaoyiping.com) 2017-02-18 -------------------------------------------------------------------------------- /src/Forever/SDK/Python/PhalApiClient/python3.x/__init__.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | #gaoyiping (iam@gaoyiping.com) 2017-02-18 -------------------------------------------------------------------------------- /src/Forever/SDK/Ruby/PhalApiClient/tests/client_response.rb: -------------------------------------------------------------------------------- 1 | require_relative '../phalapi_client' 2 | require 'test/unit' 3 | 4 | class ClientResponseTest < Test::Unit::TestCase 5 | def test_new 6 | a_response = PhalApi::ClientResponse.new(400) 7 | assert_equal 400, a_response.ret 8 | 9 | a_response = PhalApi::ClientResponse.new(500, [], 'Server Error') 10 | assert_equal 500, a_response.ret 11 | assert_equal [], a_response.data 12 | assert_equal 'Server Error', a_response.msg 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /src/Forever/SDK/Ruby/PhalApiClient/tests/run_tests: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ruby ./client_response.rb 4 | 5 | ruby ./client_parser_json.rb 6 | 7 | ruby ./client.rb 8 | -------------------------------------------------------------------------------- /src/PhalApi/Act/Tests/test_env.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Act'); 12 | 13 | //日记纪录 - Explorer 14 | DI()->logger = new PhalApi_Logger_Explorer( 15 | PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR); 16 | 17 | -------------------------------------------------------------------------------- /src/PhalApi/Config/sys.php: -------------------------------------------------------------------------------- 1 | false, 11 | 12 | /** 13 | * MC缓存服务器参考配置 14 | */ 15 | 'mc' => array( 16 | 'host' => '127.0.0.1', 17 | 'port' => 11211, 18 | ), 19 | 20 | /** 21 | * 加密 22 | */ 23 | 'crypt' => array( 24 | 'mcrypt_iv' => '12345678', //8位 25 | ), 26 | ); 27 | -------------------------------------------------------------------------------- /src/PhalApi/Config/sys.php.prod: -------------------------------------------------------------------------------- 1 | false, 11 | 12 | /** 13 | * MC缓存服务器参考配置 14 | */ 15 | 'mc' => array( 16 | 'host' => '127.0.0.1', 17 | 'port' => 11211, 18 | ), 19 | 20 | /** 21 | * 加密 22 | */ 23 | 'crypt' => array( 24 | 'mcrypt_iv' => '12345678', //8位 25 | ), 26 | ); 27 | -------------------------------------------------------------------------------- /src/PhalApi/Data/demo.sql: -------------------------------------------------------------------------------- 1 | `name` varchar(11) DEFAULT NULL, 2 | -------------------------------------------------------------------------------- /src/PhalApi/Data/phalapi_test.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `phalapi_test`.`tbl_user` ( 2 | `id` INT NOT NULL, 3 | `name` VARCHAR(45) NULL, 4 | `note` VARCHAR(45) NULL, 5 | PRIMARY KEY (`id`)); 6 | 7 | 8 | INSERT INTO `phalapi_test`.`tbl_user` (`id`, `name`, `note`) VALUES ('1', 'dogstar', 'oschina'); 9 | 10 | -------------------------------------------------------------------------------- /src/PhalApi/Data/user.sql: -------------------------------------------------------------------------------- 1 | `name` VARCHAR(45) NULL, 2 | `note` VARCHAR(45) NULL, 3 | -------------------------------------------------------------------------------- /src/PhalApi/Demo/ModelProxy/UserBaseInfo.php: -------------------------------------------------------------------------------- 1 | 2015-02-22 4 | */ 5 | 6 | class ModelProxy_UserBaseInfo extends PhalApi_ModelProxy { 7 | 8 | protected function doGetData($query) { 9 | $model = new Model_User(); 10 | 11 | return $model->getByUserId($query->id); 12 | } 13 | 14 | protected function getKey($query) { 15 | return 'userbaseinfo_' . $query->id; 16 | } 17 | 18 | protected function getExpire($query) { 19 | return 600; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/PhalApi/Demo/Tests/test_env.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Demo'); 12 | 13 | //日记纪录 - Explorer 14 | DI()->logger = new PhalApi_Logger_Explorer( 15 | PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR); 16 | 17 | -------------------------------------------------------------------------------- /src/PhalApi/LICENSE.md: -------------------------------------------------------------------------------- 1 | ##协议许可的权利 - GPL协议 2 | 3 | PhalApi官方网站为 http://www.phalapi.net,依法独立拥有 PhalApi 及官网发布的PhalApi衍生产品著作权。 4 | PhalApi及其衍生产品著作权受到法律和国际公约保护。使用者需仔细阅读本协议,在理解、同意、并遵守本协 5 | 议的全部条款后,方可开始使用 PhalApi及其衍生 软件。 6 | 7 | 本授权协议适用于 http://www.phalapi.net 发布的所有应用程序,PhalApi官方网站拥有对本授权协议的最终 8 | 解释权。 9 | 10 | PhalApi是一个PHP轻量级开源接口框架,并承诺永久免费!请放心使用! -------------------------------------------------------------------------------- /src/PhalApi/Language/de/common.php: -------------------------------------------------------------------------------- 1 | '{name}Hallo, Willkommen PhalApi!', 8 | 'user not exists' => 'Der nutzer gibt es nicht', 9 | ); 10 | -------------------------------------------------------------------------------- /src/PhalApi/Language/en/common.php: -------------------------------------------------------------------------------- 1 | 'Hello {name}, Welcome to use PhalApi!', 5 | 'user not exists' => 'user not exists', 6 | ); 7 | -------------------------------------------------------------------------------- /src/PhalApi/Language/fr/common.php: -------------------------------------------------------------------------------- 1 | '{name}Bonjour, bienvenue PhalApi!', 6 | 'user not exists' => "L'utilisateur n'existe pas", 7 | ); 8 | -------------------------------------------------------------------------------- /src/PhalApi/Language/jp/common.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 9 | */ 10 | 11 | return array( 12 | 'Hi {name}, welcome to use PhalApi!' => '{name}您好,欢迎使用PhalApi!', 13 | 'user not exists' => '用户不存在', 14 | ); 15 | -------------------------------------------------------------------------------- /src/PhalApi/Language/zh_tw/common.php: -------------------------------------------------------------------------------- 1 | '{name}您好,歡迎使用PhalApi!', 5 | 'user not exists' => '用戶不存在', 6 | ); 7 | -------------------------------------------------------------------------------- /src/PhalApi/Library/FastRoute/FastRoute/.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | php: 4 | - 5.4 5 | - 5.5 6 | - 5.6 7 | - 7.0 8 | - hhvm 9 | 10 | matrix: 11 | allow_failures: 12 | - php: 7.0 13 | -------------------------------------------------------------------------------- /src/PhalApi/Library/FastRoute/FastRoute/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nikic/fast-route", 3 | "description": "Fast request router for PHP", 4 | "keywords": ["routing", "router"], 5 | "license": "BSD-3-Clause", 6 | "authors": [ 7 | { 8 | "name": "Nikita Popov", 9 | "email": "nikic@php.net" 10 | } 11 | ], 12 | "require": { 13 | "php": ">=5.4.0" 14 | }, 15 | "autoload": { 16 | "psr-4": { 17 | "FastRoute\\": "src/" 18 | }, 19 | "files": ["src/functions.php"] 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/PhalApi/Library/FastRoute/FastRoute/src/BadRouteException.php: -------------------------------------------------------------------------------- 1 | markTestSkipped('PHP 5.6 required for MARK support'); 10 | } 11 | } 12 | 13 | protected function getDispatcherClass() { 14 | return 'FastRoute\\Dispatcher\\MarkBased'; 15 | } 16 | 17 | protected function getDataGeneratorClass() { 18 | return 'FastRoute\\DataGenerator\\MarkBased'; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/PhalApi/Library/FastRoute/FastRoute/test/bootstrap.php: -------------------------------------------------------------------------------- 1 | output(); 7 | exit(0); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/PhalApi/Library/FastRoute/Language/zh_cn/common.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 9 | */ 10 | 11 | return array( 12 | 'FastRoute Method Not Allowed, It Should be: {methods}' => '快速路由的HTTP请求方法错误,应该为:{methods}', 13 | ); 14 | -------------------------------------------------------------------------------- /src/PhalApi/Library/PHPRPC/check.php: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | [POST data]\n"; 6 | die(); 7 | } 8 | $url = $argv[1]; 9 | $params = array(); 10 | if (isset($argv[2])) { 11 | parse_str($argv[2], $params); 12 | } 13 | 14 | require_once dirname(__FILE__) . '/phprpc/phprpc_client.php'; 15 | 16 | $client = new PHPRPC_Client(); 17 | $client->setProxy(NULL); 18 | $client->useService($url); 19 | $client->setKeyLength(1000); 20 | $client->setEncryptMode(3); 21 | $client->setCharset('UTF-8'); 22 | $client->setTimeout(10); 23 | 24 | var_dump($client->response(json_encode($params))); 25 | 26 | -------------------------------------------------------------------------------- /src/PhalApi/Library/Qiniu/qiniu/conf.php: -------------------------------------------------------------------------------- 1 | '; 18 | $QINIU_SECRET_KEY = ''; 19 | 20 | -------------------------------------------------------------------------------- /src/PhalApi/Library/Qiniu/qiniu/utils.php: -------------------------------------------------------------------------------- 1 | array( 9 | 'wsdl' => NULL, 10 | 'options' => array( 11 | 'uri' => 'http://localhost/demo/soap.php', 12 | 'port' => NULL, 13 | ), 14 | ), 15 | ); 16 | -------------------------------------------------------------------------------- /src/PhalApi/Library/SOAP/Lite.php: -------------------------------------------------------------------------------- 1 | config->get('app.SOAP'); 12 | 13 | $server = new SOAPServer( 14 | $config['wsdl'], 15 | $config['options'] 16 | ); 17 | 18 | $server->setClass('SOAP_PhalApi'); 19 | return $server->handle(); 20 | } catch (SOAPFault $f) { 21 | DI()->logger->error('SAOPFault', $f->faultstring); 22 | return FALSE; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/PhalApi/Library/Task/Config/dbs.php: -------------------------------------------------------------------------------- 1 | array( 6 | 7 | //请将以下配置拷贝到 ./Config/dbs.php 文件对应的位置中,未配置的表将使用默认路由 8 | 9 | //10张表,可根据需要,自行调整表前缀、主键名和路由 10 | 'task_mq' => array( 11 | 'prefix' => 'phalapi_', 12 | 'key' => 'id', 13 | 'map' => array( 14 | array('db' => 'db_demo'), 15 | array('start' => 0, 'end' => 9, 'db' => 'db_demo'), 16 | ), 17 | ), 18 | ) 19 | ); 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/PhalApi/Library/Task/Data/task_mq.sql: -------------------------------------------------------------------------------- 1 | `service` varchar(200) DEFAULT '' COMMENT '接口服务名称', 2 | `params` text COMMENT 'json格式的参数', 3 | `create_time` int(11) DEFAULT '0', 4 | -------------------------------------------------------------------------------- /src/PhalApi/Library/Task/Data/task_progress.sql: -------------------------------------------------------------------------------- 1 | `title` varchar(200) DEFAULT '' COMMENT '任务标题', 2 | `trigger_class` varchar(50) DEFAULT '' COMMENT '触发器类名', 3 | `fire_params` varchar(255) DEFAULT '' COMMENT '需要传递的参数,格式自定', 4 | `interval_time` int(11) DEFAULT '0' COMMENT '执行间隔,单位:秒', 5 | `enable` tinyint(1) DEFAULT '1' COMMENT '是否启动,1启动,0禁止', 6 | `result` varchar(255) DEFAULT '' COMMENT '运行的结果,以json格式保存', 7 | `state` tinyint(1) DEFAULT '0' COMMENT '进程状态,0空闲,1运行中,-1异常退出', 8 | `last_fire_time` int(11) DEFAULT '0' COMMENT '上一次运行时间', 9 | -------------------------------------------------------------------------------- /src/PhalApi/Library/Task/MQ.php: -------------------------------------------------------------------------------- 1 | 20150516 8 | */ 9 | 10 | interface Task_MQ { 11 | 12 | /** 13 | * 单个添加 14 | * @param string $service 接口服务名称,如:Default.Index 15 | * @param array $params 接口服务参数 16 | */ 17 | public function add($service, $params = array()); 18 | 19 | /** 20 | * 批量弹出 21 | * @param string $service 需要获取的接口服务名称 22 | * @param int $num 弹出的个数 23 | */ 24 | public function pop($service, $num = 1); 25 | } 26 | -------------------------------------------------------------------------------- /src/PhalApi/Library/Task/MQ/DB.php: -------------------------------------------------------------------------------- 1 | 20150516 8 | */ 9 | 10 | class Task_MQ_DB implements Task_MQ { 11 | 12 | public function add($service, $params = array()) { 13 | $model = new Model_Task_TaskMq(); 14 | return $model->add($service, $params); 15 | } 16 | 17 | public function pop($service, $num = 1) { 18 | $model = new Model_Task_TaskMq(); 19 | return $model->pop($service, $num); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/PhalApi/Library/Task/Progress/Trigger.php: -------------------------------------------------------------------------------- 1 | 20150520 6 | */ 7 | 8 | interface Task_Progress_Trigger { 9 | 10 | /** 11 | * 进程的具体操作 12 | * @param string $params 对应数据库表task_progress.fire_params字段 13 | */ 14 | public function fire($params); 15 | } 16 | -------------------------------------------------------------------------------- /src/PhalApi/Library/Task/Runner/Remote/Connector/Http.php: -------------------------------------------------------------------------------- 1 | get('curl', 'PhalApi_CUrl'); 7 | 8 | return $curl->post($url, $data, $timeoutMs); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/PhalApi/Library/Task/Tests/test_env.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Demo'); 8 | DI()->loader->addDirs('Library'); 9 | DI()->loader->addDirs('./Library/Task/Task'); 10 | 11 | DI()->logger = new PhalApi_Logger_Explorer( 12 | PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR); 13 | 14 | SL('en'); 15 | -------------------------------------------------------------------------------- /src/PhalApi/Library/Task/crontab.php: -------------------------------------------------------------------------------- 1 | loader->addDirs(array('Demo', 'Library', 'Library/Task/Task')); 6 | 7 | try { 8 | $progress = new Task_Progress(); 9 | $progress->run(); 10 | } catch (Exception $ex) { 11 | echo $ex->getMessage(); 12 | echo "\n\n"; 13 | echo $ex->getTraceAsString(); 14 | // notify ... 15 | } 16 | -------------------------------------------------------------------------------- /src/PhalApi/Library/Wechat/OutMessage/Image.php: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | "; 15 | 16 | return sprintf($template, $this->mediaId); 17 | } 18 | 19 | public function setMediaId($mediaId) 20 | { 21 | $this->mediaId = $mediaId; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/PhalApi/Library/Wechat/OutMessage/Text.php: -------------------------------------------------------------------------------- 1 | 10 | "; 11 | 12 | return sprintf($template, $this->content); 13 | } 14 | 15 | public function setContent($content) 16 | { 17 | $this->content = $content; 18 | return $this; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/PhalApi/Library/Wechat/OutMessage/Voice.php: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | "; 13 | 14 | return sprintf($template, $this->mediaId); 15 | } 16 | 17 | public function setMediaId($mediaId) 18 | { 19 | $this->mediaId = $mediaId; 20 | return $this; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/PhalApi/Library/Wechat/Plugin/DeviceEvent.php: -------------------------------------------------------------------------------- 1 | value = $value; 18 | $this->parameters = func_get_args(); 19 | array_shift($this->parameters); 20 | } 21 | 22 | /** Get literal value 23 | * @return string 24 | */ 25 | function __toString() { 26 | return $this->value; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/PhalApi/Cache/None.php: -------------------------------------------------------------------------------- 1 | 2015-02-04 9 | */ 10 | 11 | class PhalApi_Cache_None implements PhalApi_Cache { 12 | 13 | public function set($key, $value, $expire = 600) { 14 | } 15 | 16 | public function get($key) { 17 | return NULL; 18 | } 19 | 20 | public function delete($key) { 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/PhalApi/DB.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 11 | */ 12 | interface PhalApi_DB{ 13 | 14 | public function connect(); 15 | 16 | public function disconnect(); 17 | } 18 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/PhalApi/Exception.php: -------------------------------------------------------------------------------- 1 | 2014-10-02 11 | */ 12 | 13 | class PhalApi_Exception extends Exception { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/PhalApi/Exception/BadRequest.php: -------------------------------------------------------------------------------- 1 | 2015-02-05 11 | */ 12 | 13 | class PhalApi_Exception_BadRequest extends PhalApi_Exception{ 14 | 15 | public function __construct($message, $code = 0) { 16 | parent::__construct( 17 | T('Bad Request: {message}', array('message' => $message)), 400 + $code 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/PhalApi/Exception/InternalServerError.php: -------------------------------------------------------------------------------- 1 | 2015-02-05 9 | */ 10 | 11 | class PhalApi_Exception_InternalServerError extends PhalApi_Exception { 12 | 13 | public function __construct($message, $code = 0) { 14 | parent::__construct( 15 | T('Interal Server Error: {message}', array('message' => $message)), 500 + $code 16 | ); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/PhalApi/Filter/None.php: -------------------------------------------------------------------------------- 1 | 2015-10-23 9 | */ 10 | 11 | class PhalApi_Filter_None implements PhalApi_Filter { 12 | 13 | public function check() { 14 | // nothing here ... 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/PhalApi/Helper/_Domain.php.tpl: -------------------------------------------------------------------------------- 1 | 2015-11-07 9 | */ 10 | 11 | interface PhalApi_Request_Formatter { 12 | 13 | public function parse($value, $rule); 14 | } 15 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/PhalApi/Request/Formatter/Callback.php: -------------------------------------------------------------------------------- 1 | 2017-04-19 12 | */ 13 | 14 | 15 | class PhalApi_Request_Formatter_Callback extends PhalApi_Request_Formatter_Callable { 16 | } 17 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/PhalApi/Response/Explorer.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 9 | */ 10 | 11 | class PhalApi_Response_Explorer extends PhalApi_Response { 12 | 13 | protected function formatResult($result) { 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/PhalApi/Response/Json.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 9 | */ 10 | 11 | class PhalApi_Response_Json extends PhalApi_Response { 12 | 13 | public function __construct() { 14 | $this->addHeaders('Content-Type', 'application/json;charset=utf-8'); 15 | } 16 | 17 | protected function formatResult($result) { 18 | return json_encode($result); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/Tests/Config/app.php: -------------------------------------------------------------------------------- 1 | array( 5 | 'from' => array('name' => 'from', 'default' => 'phpunit'), 6 | ), 7 | 8 | /** 9 | * 接口服务白名单,格式:接口服务类名.接口服务方法名 10 | * 11 | * 示例: 12 | * - *.* 通配,全部接口服务,慎用! 13 | * - Default.* Api_Default接口类的全部方法 14 | * - *.Index 全部接口类的Index方法 15 | * - Default.Index 指定某个接口服务,即Api_Default::Index() 16 | */ 17 | 'service_whitelist' => array( 18 | '*.Index', 19 | 'ServiceWhitelist.PoPo', 20 | ), 21 | ); 22 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/Tests/Config/sys.php: -------------------------------------------------------------------------------- 1 | false, 5 | ); 6 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/Tests/Data/Language/zh_cn/common.php: -------------------------------------------------------------------------------- 1 | 'this is a good way', 5 | ); 6 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/Tests/Language/zh_cn/common.php: -------------------------------------------------------------------------------- 1 | '{name}您好,欢迎使用PhalApi!', 12 | 'user not exists' => '用户不存在', 13 | '{0} I love you' => '{0} 我爱你', 14 | '{0} I love you because {1}' => '{0} 我爱你因为{1}', 15 | ); 16 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/Tests/Request/Formatter/Classes/FormatterCallbackMyClass.php: -------------------------------------------------------------------------------- 1 | 'Hello PhpUnit'); 3 | -------------------------------------------------------------------------------- /src/PhalApi/PhalApi/phalapi-buildcode: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | loader->addDirs(array('Act')); 10 | 11 | /** ---------------- 响应接口请求 ---------------- **/ 12 | 13 | $api = new PhalApi(); 14 | $rs = $api->response(); 15 | $rs->output(); 16 | 17 | -------------------------------------------------------------------------------- /src/PhalApi/Public/demo/index.php: -------------------------------------------------------------------------------- 1 | loader->addDirs(array('Demo')); 10 | 11 | /** ---------------- 响应接口请求 ---------------- **/ 12 | 13 | $api = new PhalApi(); 14 | $rs = $api->response(); 15 | $rs->output(); 16 | 17 | -------------------------------------------------------------------------------- /src/PhalApi/Public/index.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Demo'); 10 | 11 | /** ---------------- 响应接口请求 ---------------- **/ 12 | 13 | $api = new PhalApi(); 14 | $rs = $api->response(); 15 | $rs->output(); 16 | 17 | -------------------------------------------------------------------------------- /src/PhalApi/Public/install/_footer.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |

©2015-2017 PhalApi All Rights Reserved. 粤ICP备15028808号

5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/PhalApi/Public/install/_install.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/src/PhalApi/Public/install/_install.lock -------------------------------------------------------------------------------- /src/PhalApi/Public/shop/cli: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | loader->addDirs('Shop'); 7 | 8 | $cli = new CLI_Lite(); 9 | $cli->response(); 10 | -------------------------------------------------------------------------------- /src/PhalApi/Public/shop/phprpc.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Shop'); 6 | 7 | $server = new PHPRPC_Lite(); 8 | $server->response(); 9 | -------------------------------------------------------------------------------- /src/PhalApi/Public/shop/soap.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Shop'); 6 | 7 | $server = new SOAP_Lite(); 8 | $server->response(); 9 | 10 | -------------------------------------------------------------------------------- /src/PhalApi/Public/shop/test_qiniu.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 |
6 | 7 | -------------------------------------------------------------------------------- /src/PhalApi/Public/shop/weixin.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Shop'); 13 | 14 | /** ---------------- 微信轻聊版 ---------------- **/ 15 | 16 | $robot = new Wechat_Lite('YourTokenHere...', true); 17 | $rs = $robot->response(); 18 | $rs->output(); 19 | -------------------------------------------------------------------------------- /src/PhalApi/Runtime/README.md: -------------------------------------------------------------------------------- 1 | Hey guys, logs file here! 2 | 3 | 出现日志文件不存在或无内容,请检查/Runtime目录是否有写入权限。 -------------------------------------------------------------------------------- /src/PhalApi/SDK/C_Sharp/PhalApiClient/PhalApiClientFilter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace PhalApiClientSDK 7 | { 8 | /** 9 | * 接口过滤器 10 | * 11 | * - 可用于接口签名生成 12 | */ 13 | public interface PhalApiClientFilter { 14 | 15 | /** 16 | * 过滤操作 17 | * @param string service 接口服务名称 18 | * @param Map params 接口参数,注意是引用。可以直接修改 19 | * @return null 20 | */ 21 | void filter(String service, Dictionary paramsList); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/PhalApi/SDK/C_Sharp/PhalApiClient/PhalApiClientParser.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace PhalApiClientSDK 7 | { 8 | /** 9 | * 接口结果解析器 10 | * 11 | * - 可用于不同接口返回格式的处理 12 | */ 13 | public interface PhalApiClientParser 14 | { 15 | 16 | /** 17 | * 结果解析 18 | * @param String apiResult 19 | * @return PhalApiClientResponse 20 | */ 21 | PhalApiClientResponse parse(String apiResult); 22 | } 23 | 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/PhalApi/SDK/Go/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "./PhalApiClient" 5 | "fmt" 6 | "net/url" 7 | ) 8 | 9 | func main() { 10 | rs, err := PhalApiClient.NewRequest(). 11 | WithHost(`http://127.0.0.1/PhalApi/Public/index.php`). 12 | WithService("Default.index"). 13 | WithParams(url.Values{}). 14 | Get() 15 | if err != nil { 16 | fmt.Println(err.Error()) 17 | } else { 18 | fmt.Println("code------------------------", rs.Code) 19 | fmt.Println("data------------------------", rs.Data) 20 | fmt.Println("msg------------------------", rs.Msg) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/PhalApi/SDK/JAVA/net/phalapi/sdk/PhalApiClientFilter.java: -------------------------------------------------------------------------------- 1 | package net.phalapi.sdk; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 接口过滤器 7 | * 8 | * - 可用于接口签名生成 9 | */ 10 | public interface PhalApiClientFilter { 11 | 12 | /** 13 | * 过滤操作 14 | * @param string service 接口服务名称 15 | * @param Map params 接口参数,注意是引用。可以直接修改 16 | * @return null 17 | */ 18 | public void filter(String service, Map params); 19 | } 20 | -------------------------------------------------------------------------------- /src/PhalApi/SDK/JAVA/net/phalapi/sdk/PhalApiClientParser.java: -------------------------------------------------------------------------------- 1 | package net.phalapi.sdk; 2 | 3 | /** 4 | * 接口结果解析器 5 | * 6 | * - 可用于不同接口返回格式的处理 7 | */ 8 | public interface PhalApiClientParser { 9 | 10 | /** 11 | * 结果解析 12 | * @param String apiResult 13 | * @return PhalApiClientResponse 14 | */ 15 | public PhalApiClientResponse parse(String apiResult); 16 | } 17 | 18 | -------------------------------------------------------------------------------- /src/PhalApi/SDK/Objective-C/PhalApiClient/AFNPhalApiClient/AFNPhalApiClient.h: -------------------------------------------------------------------------------- 1 | // 2 | // AFNPhalApiClient.h 3 | // PhalApiClientDemo 4 | // 5 | // Created by Aevit on 15/10/18. 6 | // Copyright © 2015年 Aevit. All rights reserved. 7 | // 8 | 9 | #import "PhalApiClient.h" 10 | #import "AFHTTPRequestOperationManager.h" 11 | 12 | @interface AFNPhalApiClient : PhalApiClient 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /src/PhalApi/SDK/Objective-C/PhalApiClient/PhalApiClientFilter.h: -------------------------------------------------------------------------------- 1 | // 2 | // PhalApiClientFilter.h 3 | // PhalApiClientDemo 4 | // 5 | // Created by Aevit on 15/10/18. 6 | // Copyright © 2015年 Aevit. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PhalApiClientFilter : NSObject 12 | 13 | /** 14 | * 接口过滤器 15 | * 可用于接口签名生成 16 | * 17 | * @param service 接口服务名称 18 | * @param params 接口参数,注意是mutable变量,可以直接修改 19 | */ 20 | - (void)filter:(NSString*)service params:(NSMutableDictionary*)params; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /src/PhalApi/SDK/Objective-C/PhalApiClient/PhalApiClientFilter.m: -------------------------------------------------------------------------------- 1 | // 2 | // PhalApiClientFilter.m 3 | // PhalApiClientDemo 4 | // 5 | // Created by Aevit on 15/10/18. 6 | // Copyright © 2015年 Aevit. All rights reserved. 7 | // 8 | 9 | #import "PhalApiClientFilter.h" 10 | 11 | @implementation PhalApiClientFilter 12 | 13 | /** 14 | * 接口过滤器 15 | * 可用于接口签名生成 16 | * 17 | * @param service 接口服务名称 18 | * @param params 接口参数,注意是mutable变量,可以直接修改 19 | */ 20 | - (void)filter:(NSString*)service params:(NSMutableDictionary*)params { 21 | // 在此对接口进行过滤 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /src/PhalApi/SDK/Objective-C/XSHttpTool/Singleton.h: -------------------------------------------------------------------------------- 1 | // .h 2 | #define singleton_interface(class) + (instancetype)shared##class; 3 | 4 | // .m 5 | #define singleton_implementation(class) \ 6 | static class *_instance; \ 7 | \ 8 | + (id)allocWithZone:(struct _NSZone *)zone \ 9 | { \ 10 | static dispatch_once_t onceToken; \ 11 | dispatch_once(&onceToken, ^{ \ 12 | _instance = [super allocWithZone:zone]; \ 13 | }); \ 14 | \ 15 | return _instance; \ 16 | } \ 17 | \ 18 | + (instancetype)shared##class \ 19 | { \ 20 | if (_instance == nil) { \ 21 | _instance = [[class alloc] init]; \ 22 | } \ 23 | \ 24 | return _instance; \ 25 | } 26 | 27 | -------------------------------------------------------------------------------- /src/PhalApi/SDK/Python/PhalApiClient/python2.x/PhalApiClient.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | #gaoyiping (iam@gaoyiping.com) 2017-02-18 3 | import json, urllib, urllib2 4 | 5 | def PhalApiClient(host, service = None, params = None, timeout = None): 6 | url = host + ('' if service is None else ('?service=' + service)) 7 | if params is not None: 8 | assert type(params) is dict, 'params type must be dict' 9 | assert params, 'params must is valid values' 10 | params = urllib.urlencode(params) 11 | request = urllib2.Request(url) 12 | response = urllib2.urlopen(request, data = params, timeout = timeout) 13 | return {'info': response.info(), 'state': response.getcode(), 'data': json.loads(response.read())} -------------------------------------------------------------------------------- /src/PhalApi/SDK/Python/PhalApiClient/python2.x/__init__.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | #gaoyiping (iam@gaoyiping.com) 2017-02-18 -------------------------------------------------------------------------------- /src/PhalApi/SDK/Python/PhalApiClient/python3.x/__init__.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | #gaoyiping (iam@gaoyiping.com) 2017-02-18 -------------------------------------------------------------------------------- /src/PhalApi/SDK/Ruby/PhalApiClient/tests/client_response.rb: -------------------------------------------------------------------------------- 1 | require_relative '../phalapi_client' 2 | require 'test/unit' 3 | 4 | class ClientResponseTest < Test::Unit::TestCase 5 | def test_new 6 | a_response = PhalApi::ClientResponse.new(400) 7 | assert_equal 400, a_response.ret 8 | 9 | a_response = PhalApi::ClientResponse.new(500, [], 'Server Error') 10 | assert_equal 500, a_response.ret 11 | assert_equal [], a_response.data 12 | assert_equal 'Server Error', a_response.msg 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /src/PhalApi/SDK/Ruby/PhalApiClient/tests/run_tests: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ruby ./client_response.rb 4 | 5 | ruby ./client_parser_json.rb 6 | 7 | ruby ./client.rb 8 | -------------------------------------------------------------------------------- /src/PhalApi/Shop/Api/Cookie.php: -------------------------------------------------------------------------------- 1 | cookie->set('name', 'phalapi', $_SERVER['REQUEST_TIME'] + 600); 7 | } 8 | 9 | public function get() { 10 | return DI()->cookie->get('name'); 11 | } 12 | 13 | public function delete() { 14 | DI()->cookie->delete('name'); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/PhalApi/Shop/Api/Pay/Alipay.php: -------------------------------------------------------------------------------- 1 | array( 12 | ), 13 | ); 14 | } 15 | 16 | /** 17 | * go接口 18 | * @desc go接口描述 19 | * @return int code 状态码,0表示成功,非0表示失败 20 | * @return string msg 状态提示 21 | */ 22 | public function go() { 23 | $rs = array('code' => 0, 'msg' => ''); 24 | 25 | // TODO 26 | $domain = new Domain_Pay_Alipay(); 27 | $domain->go(); 28 | 29 | return $rs; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/PhalApi/Shop/Api/Statistics.php: -------------------------------------------------------------------------------- 1 | array( 8 | 'username' => array('name' => 'username', 'require' => true), 9 | 'msg' => array('name' => 'msg', 'require' => true), 10 | ), 11 | ); 12 | } 13 | 14 | public function report() { 15 | DI()->logger->info($this->username, $this->msg); 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /src/PhalApi/Shop/Api/Stock.php: -------------------------------------------------------------------------------- 1 | array( 12 | ), 13 | ); 14 | } 15 | 16 | /** 17 | * go接口 18 | * @desc go接口描述 19 | * @return int code 状态码,0表示成功,非0表示失败 20 | * @return string msg 状态提示 21 | */ 22 | public function go() { 23 | $rs = array('code' => 0, 'msg' => ''); 24 | 25 | // TODO 26 | $domain = new Domain_Stock(); 27 | $domain->go(); 28 | 29 | return $rs; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/PhalApi/Shop/Api/Welcome.php: -------------------------------------------------------------------------------- 1 | array( 11 | 'version' => array('name' => 'version', 'type' => 'callable', 'callback' => 'Common_Request_Version::formatVersion'), 12 | ) 13 | ); 14 | } 15 | 16 | /** 17 | * 欢迎光临 18 | * @desc 简单的Hello Wolrd返回 19 | */ 20 | public function say() { 21 | DI()->tracer->mark('欢迎光临'); 22 | 23 | //throw new Exception('这是一个演示异常调试的示例', 501); 24 | 25 | return 'Hello World'; 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /src/PhalApi/Shop/Common/Crypt/Base64.php: -------------------------------------------------------------------------------- 1 | get('r'); 8 | if (!empty($servcie)) { 9 | return str_replace('/', '.', $servcie); 10 | } 11 | 12 | return parent::getService(); 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /src/PhalApi/Shop/Common/Request/Email.php: -------------------------------------------------------------------------------- 1 | post = json_decode(file_get_contents('php://input'), TRUE); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/PhalApi/Shop/Common/Request/Stream.php: -------------------------------------------------------------------------------- 1 | = 200 && $oldRs['ret'] <= 299) { 10 | $newRs = $oldRs['data']; 11 | } else { 12 | $newRs['status'] = $oldRs['ret']; 13 | $newRs['errormsg'] = $oldRs['msg']; 14 | } 15 | 16 | if (isset($oldRs['debug']) && is_array($newRs)) { 17 | $newRs['debug'] = $oldRs['debug']; 18 | } 19 | 20 | return $newRs; 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /src/PhalApi/Shop/Domain/Comment.php: -------------------------------------------------------------------------------- 1 | get($id); 8 | // 判断数据有效性 9 | return !empty($rs) ? $rs : array(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/PhalApi/Shop/Domain/Goods.php: -------------------------------------------------------------------------------- 1 | getSnapshot($goodsId); 11 | 12 | if (empty($info) || $info['goods_price'] <= 0) { 13 | return array(); 14 | } 15 | 16 | return $info; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/PhalApi/Shop/Domain/Pay/Alipay.php: -------------------------------------------------------------------------------- 1 | getORM($id)->select('name')->fetchRow(); 15 | return !empty($row) ? $row['name'] : ''; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/PhalApi/Shop/ModelProxy/Heavy/Goods.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/src/PhalApi/Shop/ModelProxy/Heavy/Goods.php -------------------------------------------------------------------------------- /src/PhalApi/Shop/ModelProxy/Light/SiteConfig.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/src/PhalApi/Shop/ModelProxy/Light/SiteConfig.php -------------------------------------------------------------------------------- /src/PhalApi/Shop/ModelProxy/Query/Goods.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/src/PhalApi/Shop/ModelProxy/Query/Goods.php -------------------------------------------------------------------------------- /src/PhalApi/Shop/ModelProxy/Query/Recommond.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/src/PhalApi/Shop/ModelProxy/Query/Recommond.php -------------------------------------------------------------------------------- /src/PhalApi/Shop/ModelProxy/Query/SiteConfig.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/src/PhalApi/Shop/ModelProxy/Query/SiteConfig.php -------------------------------------------------------------------------------- /src/PhalApi/Shop/ModelProxy/Realtime/Recommend.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/src/PhalApi/Shop/ModelProxy/Realtime/Recommend.php -------------------------------------------------------------------------------- /src/PhalApi/Shop/Plugin/Money.php: -------------------------------------------------------------------------------- 1 | setTitle('让红包飞~') 10 | ->setDescription(sprintf('您已领取到一个%d元红包~', rand(1, 100))) 11 | ->setPicUrl('http://webtools.qiniudn.com/172906_61c8663a_121026.jpeg') 12 | ->setUrl('https://www.phalapi.net/'); 13 | 14 | $outMessage->addItem($item); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/PhalApi/Shop/Tests/Common/Calculator.php: -------------------------------------------------------------------------------- 1 | false, 11 | 12 | /** 13 | * MC缓存服务器参考配置 14 | */ 15 | 'mc' => array( 16 | 'host' => '127.0.0.1', 17 | 'port' => 11211, 18 | ), 19 | 20 | /** 21 | * 加密 22 | */ 23 | 'crypt' => array( 24 | 'mcrypt_iv' => '12345678', //8位 25 | ), 26 | ); 27 | -------------------------------------------------------------------------------- /src/WeTime/Data/phalapi_test.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `phalapi`.`tbl_user` ( 2 | `id` INT NOT NULL, 3 | `name` VARCHAR(45) NULL, 4 | `note` VARCHAR(45) NULL, 5 | PRIMARY KEY (`id`)); 6 | 7 | 8 | INSERT INTO `phalapi`.`tbl_user` (`id`, `name`, `note`) VALUES ('1', 'dogstar', 'oschina'); 9 | 10 | -------------------------------------------------------------------------------- /src/WeTime/Data/user.sql: -------------------------------------------------------------------------------- 1 | `name` VARCHAR(45) NULL, 2 | `note` VARCHAR(45) NULL, 3 | -------------------------------------------------------------------------------- /src/WeTime/Demo/ModelProxy/UserBaseInfo.php: -------------------------------------------------------------------------------- 1 | 2015-02-22 4 | */ 5 | 6 | class ModelProxy_UserBaseInfo extends PhalApi_ModelProxy { 7 | 8 | protected function doGetData($query) { 9 | $model = new Model_User(); 10 | 11 | return $model->getByUserId($query->id); 12 | } 13 | 14 | protected function getKey($query) { 15 | return 'userbaseinfo_' . $query->id; 16 | } 17 | 18 | protected function getExpire($query) { 19 | return 600; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/WeTime/Demo/Tests/test_env.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Demo'); 12 | 13 | //日记纪录 - Explorer 14 | DI()->logger = new PhalApi_Logger_Explorer( 15 | PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR); 16 | 17 | -------------------------------------------------------------------------------- /src/WeTime/Fun/Domain/Follow.php: -------------------------------------------------------------------------------- 1 | getFollowUids($userId); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/WeTime/Fun/Domain/User.php: -------------------------------------------------------------------------------- 1 | getUserList($allUids); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/WeTime/Fun/Model/Follow.php: -------------------------------------------------------------------------------- 1 | getORM() 10 | ->select('touid') 11 | ->where('uid', $userId) 12 | ->fetchAll(); 13 | 14 | $uids = array(); 15 | foreach ($rows as $row) { 16 | $uids[] = intval($row['touid']); 17 | } 18 | 19 | return $uids; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/WeTime/Fun/Model/User.php: -------------------------------------------------------------------------------- 1 | getORM() 10 | ->select('id, avatar') 11 | ->where('id', $allUids) 12 | ->fetchAll(); 13 | 14 | $list = array(); 15 | foreach ($rows as $row) { 16 | $list[$row['id']] = $row; 17 | } 18 | 19 | return $list; 20 | } 21 | } 22 | 23 | -------------------------------------------------------------------------------- /src/WeTime/Fun/Tests/test_env.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Fun'); 14 | 15 | //日记纪录 - Explorer 16 | DI()->logger = new PhalApi_Logger_Explorer( 17 | PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR); 18 | 19 | -------------------------------------------------------------------------------- /src/WeTime/LICENSE.md: -------------------------------------------------------------------------------- 1 | ##协议许可的权利 - GPL协议 2 | 3 | PhalApi官方网站为 http://www.phalapi.net,依法独立拥有 PhalApi 及官网发布的PhalApi衍生产品著作权。 4 | PhalApi及其衍生产品著作权受到法律和国际公约保护。使用者需仔细阅读本协议,在理解、同意、并遵守本协 5 | 议的全部条款后,方可开始使用 PhalApi及其衍生 软件。 6 | 7 | 本授权协议适用于 http://www.phalapi.net 发布的所有应用程序,PhalApi官方网站拥有对本授权协议的最终 8 | 解释权。 9 | 10 | PhalApi是一个PHP轻量级开源接口框架,并承诺永久免费!请放心使用! -------------------------------------------------------------------------------- /src/WeTime/Language/de/common.php: -------------------------------------------------------------------------------- 1 | '{name}Hallo, Willkommen PhalApi!', 8 | 'user not exists' => 'Der nutzer gibt es nicht', 9 | ); 10 | -------------------------------------------------------------------------------- /src/WeTime/Language/en/common.php: -------------------------------------------------------------------------------- 1 | 'Hello {name}, Welcome to use PhalApi!', 5 | 'user not exists' => 'user not exists', 6 | ); 7 | -------------------------------------------------------------------------------- /src/WeTime/Language/fr/common.php: -------------------------------------------------------------------------------- 1 | '{name}Bonjour, bienvenue PhalApi!', 6 | 'user not exists' => "L'utilisateur n'existe pas", 7 | ); 8 | -------------------------------------------------------------------------------- /src/WeTime/Language/zh_cn/common.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 9 | */ 10 | 11 | return array( 12 | 'Hi {name}, welcome to use PhalApi!' => '{name}您好,欢迎使用PhalApi!', 13 | 'user not exists' => '用户不存在', 14 | ); 15 | -------------------------------------------------------------------------------- /src/WeTime/Language/zh_tw/common.php: -------------------------------------------------------------------------------- 1 | '{name}您好,歡迎使用PhalApi!', 5 | 'user not exists' => '用戶不存在', 6 | ); 7 | -------------------------------------------------------------------------------- /src/WeTime/Library/README.md: -------------------------------------------------------------------------------- 1 | ##扩展类库 2 | 3 | 请查看: 4 | 5 | ``` 6 | http://git.oschina.net/dogstar/PhalApi-Library 7 | ``` -------------------------------------------------------------------------------- /src/WeTime/Library/Task/Config/dbs.php: -------------------------------------------------------------------------------- 1 | array( 6 | 7 | //请将以下配置拷贝到 ./Config/dbs.php 文件对应的位置中,未配置的表将使用默认路由 8 | 9 | //10张表,可根据需要,自行调整表前缀、主键名和路由 10 | 'task_mq' => array( 11 | 'prefix' => 'phalapi_', 12 | 'key' => 'id', 13 | 'map' => array( 14 | array('db' => 'db_demo'), 15 | array('start' => 0, 'end' => 9, 'db' => 'db_demo'), 16 | ), 17 | ), 18 | ) 19 | ); 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/WeTime/Library/Task/Data/task_mq.sql: -------------------------------------------------------------------------------- 1 | `service` varchar(200) DEFAULT '' COMMENT '接口服务名称', 2 | `params` text COMMENT 'json格式的参数', 3 | `create_time` int(11) DEFAULT '0', 4 | -------------------------------------------------------------------------------- /src/WeTime/Library/Task/Data/task_progress.sql: -------------------------------------------------------------------------------- 1 | `title` varchar(200) DEFAULT '' COMMENT '任务标题', 2 | `trigger_class` varchar(50) DEFAULT '' COMMENT '触发器类名', 3 | `fire_params` varchar(255) DEFAULT '' COMMENT '需要传递的参数,格式自定', 4 | `interval_time` int(11) DEFAULT '0' COMMENT '执行间隔,单位:秒', 5 | `enable` tinyint(1) DEFAULT '1' COMMENT '是否启动,1启动,0禁止', 6 | `result` varchar(255) DEFAULT '' COMMENT '运行的结果,以json格式保存', 7 | `state` tinyint(1) DEFAULT '0' COMMENT '进程状态,0空闲,1运行中,-1异常退出', 8 | `last_fire_time` int(11) DEFAULT '0' COMMENT '上一次运行时间', 9 | -------------------------------------------------------------------------------- /src/WeTime/Library/Task/MQ.php: -------------------------------------------------------------------------------- 1 | 20150516 8 | */ 9 | 10 | interface Task_MQ { 11 | 12 | /** 13 | * 单个添加 14 | * @param string $service 接口服务名称,如:Default.Index 15 | * @param array $params 接口服务参数 16 | */ 17 | public function add($service, $params = array()); 18 | 19 | /** 20 | * 批量弹出 21 | * @param string $service 需要获取的接口服务名称 22 | * @param int $num 弹出的个数 23 | */ 24 | public function pop($service, $num = 1); 25 | } 26 | -------------------------------------------------------------------------------- /src/WeTime/Library/Task/MQ/DB.php: -------------------------------------------------------------------------------- 1 | 20150516 8 | */ 9 | 10 | class Task_MQ_DB implements Task_MQ { 11 | 12 | public function add($service, $params = array()) { 13 | $model = new Model_Task_TaskMq(); 14 | return $model->add($service, $params); 15 | } 16 | 17 | public function pop($service, $num = 1) { 18 | $model = new Model_Task_TaskMq(); 19 | return $model->pop($service, $num); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/WeTime/Library/Task/Progress/Trigger.php: -------------------------------------------------------------------------------- 1 | 20150520 6 | */ 7 | 8 | interface Task_Progress_Trigger { 9 | 10 | /** 11 | * 进程的具体操作 12 | * @param string $params 对应数据库表task_progress.fire_params字段 13 | */ 14 | public function fire($params); 15 | } 16 | -------------------------------------------------------------------------------- /src/WeTime/Library/Task/Runner/Remote/Connector/Http.php: -------------------------------------------------------------------------------- 1 | get('curl', 'PhalApi_CUrl'); 7 | 8 | return $curl->post($url, $data, $timeoutMs); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/WeTime/Library/Task/Tests/test_env.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Demo'); 8 | DI()->loader->addDirs('Library'); 9 | DI()->loader->addDirs('./Library/Task/Task'); 10 | 11 | DI()->logger = new PhalApi_Logger_Explorer( 12 | PhalApi_Logger::LOG_LEVEL_DEBUG | PhalApi_Logger::LOG_LEVEL_INFO | PhalApi_Logger::LOG_LEVEL_ERROR); 13 | 14 | SL('en'); 15 | -------------------------------------------------------------------------------- /src/WeTime/Library/Task/crontab.php: -------------------------------------------------------------------------------- 1 | loader->addDirs(array('Demo', 'Library', 'Library/Task/Task')); 6 | 7 | try { 8 | $progress = new Task_Progress(); 9 | $progress->run(); 10 | } catch (Exception $ex) { 11 | echo $ex->getMessage(); 12 | echo "\n\n"; 13 | echo $ex->getTraceAsString(); 14 | // notify ... 15 | } 16 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/NotORM/NotORM/Literal.php: -------------------------------------------------------------------------------- 1 | value = $value; 18 | $this->parameters = func_get_args(); 19 | array_shift($this->parameters); 20 | } 21 | 22 | /** Get literal value 23 | * @return string 24 | */ 25 | function __toString() { 26 | return $this->value; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/PhalApi/Cache/None.php: -------------------------------------------------------------------------------- 1 | 2015-02-04 9 | */ 10 | 11 | class PhalApi_Cache_None implements PhalApi_Cache { 12 | 13 | public function set($key, $value, $expire = 600) { 14 | } 15 | 16 | public function get($key) { 17 | return NULL; 18 | } 19 | 20 | public function delete($key) { 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/PhalApi/DB.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 11 | */ 12 | interface PhalApi_DB{ 13 | 14 | public function connect(); 15 | 16 | public function disconnect(); 17 | } 18 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/PhalApi/Exception.php: -------------------------------------------------------------------------------- 1 | 2014-10-02 11 | */ 12 | 13 | class PhalApi_Exception extends Exception { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/PhalApi/Exception/BadRequest.php: -------------------------------------------------------------------------------- 1 | 2015-02-05 11 | */ 12 | 13 | class PhalApi_Exception_BadRequest extends PhalApi_Exception{ 14 | 15 | public function __construct($message, $code = 0) { 16 | parent::__construct( 17 | T('Bad Request: {message}', array('message' => $message)), 400 + $code 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/PhalApi/Exception/InternalServerError.php: -------------------------------------------------------------------------------- 1 | 2015-02-05 9 | */ 10 | 11 | class PhalApi_Exception_InternalServerError extends PhalApi_Exception { 12 | 13 | public function __construct($message, $code = 0) { 14 | parent::__construct( 15 | T('Interal Server Error: {message}', array('message' => $message)), 500 + $code 16 | ); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/PhalApi/Filter/None.php: -------------------------------------------------------------------------------- 1 | 2015-10-23 9 | */ 10 | 11 | class PhalApi_Filter_None implements PhalApi_Filter { 12 | 13 | public function check() { 14 | // nothing here ... 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/PhalApi/Helper/_Domain.php.tpl: -------------------------------------------------------------------------------- 1 | 2015-11-07 9 | */ 10 | 11 | interface PhalApi_Request_Formatter { 12 | 13 | public function parse($value, $rule); 14 | } 15 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/PhalApi/Request/Formatter/Callback.php: -------------------------------------------------------------------------------- 1 | 2017-04-19 12 | */ 13 | 14 | 15 | class PhalApi_Request_Formatter_Callback extends PhalApi_Request_Formatter_Callable { 16 | } 17 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/PhalApi/Response/Explorer.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 9 | */ 10 | 11 | class PhalApi_Response_Explorer extends PhalApi_Response { 12 | 13 | protected function formatResult($result) { 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/PhalApi/Response/Json.php: -------------------------------------------------------------------------------- 1 | 2015-02-09 9 | */ 10 | 11 | class PhalApi_Response_Json extends PhalApi_Response { 12 | 13 | public function __construct() { 14 | $this->addHeaders('Content-Type', 'application/json;charset=utf-8'); 15 | } 16 | 17 | protected function formatResult($result) { 18 | return json_encode($result); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/Tests/Config/app.php: -------------------------------------------------------------------------------- 1 | array( 5 | 'from' => array('name' => 'from', 'default' => 'phpunit'), 6 | ), 7 | 8 | /** 9 | * 接口服务白名单,格式:接口服务类名.接口服务方法名 10 | * 11 | * 示例: 12 | * - *.* 通配,全部接口服务,慎用! 13 | * - Default.* Api_Default接口类的全部方法 14 | * - *.Index 全部接口类的Index方法 15 | * - Default.Index 指定某个接口服务,即Api_Default::Index() 16 | */ 17 | 'service_whitelist' => array( 18 | '*.Index', 19 | 'ServiceWhitelist.PoPo', 20 | ), 21 | ); 22 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/Tests/Config/sys.php: -------------------------------------------------------------------------------- 1 | false, 5 | ); 6 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/Tests/Data/Language/zh_cn/common.php: -------------------------------------------------------------------------------- 1 | 'this is a good way', 5 | ); 6 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/Tests/Language/zh_cn/common.php: -------------------------------------------------------------------------------- 1 | '{name}您好,欢迎使用PhalApi!', 12 | 'user not exists' => '用户不存在', 13 | '{0} I love you' => '{0} 我爱你', 14 | '{0} I love you because {1}' => '{0} 我爱你因为{1}', 15 | ); 16 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/Tests/Request/Formatter/Classes/FormatterCallbackMyClass.php: -------------------------------------------------------------------------------- 1 | 'Hello PhpUnit'); 3 | -------------------------------------------------------------------------------- /src/WeTime/PhalApi/phalapi-buildcode: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | loader->addDirs('Demo'); 10 | 11 | /** ---------------- 响应接口请求 ---------------- **/ 12 | 13 | $api = new PhalApi(); 14 | $rs = $api->response(); 15 | $rs->output(); 16 | 17 | -------------------------------------------------------------------------------- /src/WeTime/Public/fun/index.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Fun'); 10 | 11 | /** ---------------- 响应接口请求 ---------------- **/ 12 | 13 | $api = new PhalApi(); 14 | $rs = $api->response(); 15 | $rs->output(); 16 | 17 | -------------------------------------------------------------------------------- /src/WeTime/Public/fun/test_upload_img.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 |
6 | 7 | -------------------------------------------------------------------------------- /src/WeTime/Public/index.php: -------------------------------------------------------------------------------- 1 | loader->addDirs('Demo'); 10 | 11 | /** ---------------- 响应接口请求 ---------------- **/ 12 | 13 | $api = new PhalApi(); 14 | $rs = $api->response(); 15 | $rs->output(); 16 | 17 | -------------------------------------------------------------------------------- /src/WeTime/Public/install/_footer.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |

©2015-2017 PhalApi All Rights Reserved. 粤ICP备15028808号

5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/WeTime/Public/upload/4bb2ec08c96a5323771b0fa8206a8114.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/src/WeTime/Public/upload/4bb2ec08c96a5323771b0fa8206a8114.jpg -------------------------------------------------------------------------------- /src/WeTime/Runtime/README.md: -------------------------------------------------------------------------------- 1 | Hey guys, logs file here! 2 | 3 | 出现日志文件不存在或无内容,请检查/Runtime目录是否有写入权限。 -------------------------------------------------------------------------------- /src/WeTime/SDK/C_Sharp/PhalApiClient/PhalApiClientFilter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace PhalApiClientSDK 7 | { 8 | /** 9 | * 接口过滤器 10 | * 11 | * - 可用于接口签名生成 12 | */ 13 | public interface PhalApiClientFilter { 14 | 15 | /** 16 | * 过滤操作 17 | * @param string service 接口服务名称 18 | * @param Map params 接口参数,注意是引用。可以直接修改 19 | * @return null 20 | */ 21 | void filter(String service, Dictionary paramsList); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/WeTime/SDK/C_Sharp/PhalApiClient/PhalApiClientParser.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace PhalApiClientSDK 7 | { 8 | /** 9 | * 接口结果解析器 10 | * 11 | * - 可用于不同接口返回格式的处理 12 | */ 13 | public interface PhalApiClientParser 14 | { 15 | 16 | /** 17 | * 结果解析 18 | * @param String apiResult 19 | * @return PhalApiClientResponse 20 | */ 21 | PhalApiClientResponse parse(String apiResult); 22 | } 23 | 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/WeTime/SDK/Go/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "./PhalApiClient" 5 | "fmt" 6 | "net/url" 7 | ) 8 | 9 | func main() { 10 | rs, err := PhalApiClient.NewRequest(). 11 | WithHost(`http://127.0.0.1/PhalApi/Public/index.php`). 12 | WithService("Default.index"). 13 | WithParams(url.Values{}). 14 | Get() 15 | if err != nil { 16 | fmt.Println(err.Error()) 17 | } else { 18 | fmt.Println("code------------------------", rs.Code) 19 | fmt.Println("data------------------------", rs.Data) 20 | fmt.Println("msg------------------------", rs.Msg) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/WeTime/SDK/JAVA/net/phalapi/sdk/PhalApiClientFilter.java: -------------------------------------------------------------------------------- 1 | package net.phalapi.sdk; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 接口过滤器 7 | * 8 | * - 可用于接口签名生成 9 | */ 10 | public interface PhalApiClientFilter { 11 | 12 | /** 13 | * 过滤操作 14 | * @param string service 接口服务名称 15 | * @param Map params 接口参数,注意是引用。可以直接修改 16 | * @return null 17 | */ 18 | public void filter(String service, Map params); 19 | } 20 | -------------------------------------------------------------------------------- /src/WeTime/SDK/JAVA/net/phalapi/sdk/PhalApiClientParser.java: -------------------------------------------------------------------------------- 1 | package net.phalapi.sdk; 2 | 3 | /** 4 | * 接口结果解析器 5 | * 6 | * - 可用于不同接口返回格式的处理 7 | */ 8 | public interface PhalApiClientParser { 9 | 10 | /** 11 | * 结果解析 12 | * @param String apiResult 13 | * @return PhalApiClientResponse 14 | */ 15 | public PhalApiClientResponse parse(String apiResult); 16 | } 17 | 18 | -------------------------------------------------------------------------------- /src/WeTime/SDK/Objective-C/PhalApiClient/AFNPhalApiClient/AFNPhalApiClient.h: -------------------------------------------------------------------------------- 1 | // 2 | // AFNPhalApiClient.h 3 | // PhalApiClientDemo 4 | // 5 | // Created by Aevit on 15/10/18. 6 | // Copyright © 2015年 Aevit. All rights reserved. 7 | // 8 | 9 | #import "PhalApiClient.h" 10 | #import "AFHTTPRequestOperationManager.h" 11 | 12 | @interface AFNPhalApiClient : PhalApiClient 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /src/WeTime/SDK/Objective-C/PhalApiClient/PhalApiClientFilter.h: -------------------------------------------------------------------------------- 1 | // 2 | // PhalApiClientFilter.h 3 | // PhalApiClientDemo 4 | // 5 | // Created by Aevit on 15/10/18. 6 | // Copyright © 2015年 Aevit. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PhalApiClientFilter : NSObject 12 | 13 | /** 14 | * 接口过滤器 15 | * 可用于接口签名生成 16 | * 17 | * @param service 接口服务名称 18 | * @param params 接口参数,注意是mutable变量,可以直接修改 19 | */ 20 | - (void)filter:(NSString*)service params:(NSMutableDictionary*)params; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /src/WeTime/SDK/Objective-C/PhalApiClient/PhalApiClientFilter.m: -------------------------------------------------------------------------------- 1 | // 2 | // PhalApiClientFilter.m 3 | // PhalApiClientDemo 4 | // 5 | // Created by Aevit on 15/10/18. 6 | // Copyright © 2015年 Aevit. All rights reserved. 7 | // 8 | 9 | #import "PhalApiClientFilter.h" 10 | 11 | @implementation PhalApiClientFilter 12 | 13 | /** 14 | * 接口过滤器 15 | * 可用于接口签名生成 16 | * 17 | * @param service 接口服务名称 18 | * @param params 接口参数,注意是mutable变量,可以直接修改 19 | */ 20 | - (void)filter:(NSString*)service params:(NSMutableDictionary*)params { 21 | // 在此对接口进行过滤 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /src/WeTime/SDK/Objective-C/XSHttpTool/Singleton.h: -------------------------------------------------------------------------------- 1 | // .h 2 | #define singleton_interface(class) + (instancetype)shared##class; 3 | 4 | // .m 5 | #define singleton_implementation(class) \ 6 | static class *_instance; \ 7 | \ 8 | + (id)allocWithZone:(struct _NSZone *)zone \ 9 | { \ 10 | static dispatch_once_t onceToken; \ 11 | dispatch_once(&onceToken, ^{ \ 12 | _instance = [super allocWithZone:zone]; \ 13 | }); \ 14 | \ 15 | return _instance; \ 16 | } \ 17 | \ 18 | + (instancetype)shared##class \ 19 | { \ 20 | if (_instance == nil) { \ 21 | _instance = [[class alloc] init]; \ 22 | } \ 23 | \ 24 | return _instance; \ 25 | } 26 | 27 | -------------------------------------------------------------------------------- /src/WeTime/SDK/Python/PhalApiClient/python2.x/PhalApiClient.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | #gaoyiping (iam@gaoyiping.com) 2017-02-18 3 | import json, urllib, urllib2 4 | 5 | def PhalApiClient(host, service = None, params = None, timeout = None): 6 | url = host + ('' if service is None else ('?service=' + service)) 7 | if params is not None: 8 | assert type(params) is dict, 'params type must be dict' 9 | assert params, 'params must is valid values' 10 | params = urllib.urlencode(params) 11 | request = urllib2.Request(url) 12 | response = urllib2.urlopen(request, data = params, timeout = timeout) 13 | return {'info': response.info(), 'state': response.getcode(), 'data': json.loads(response.read())} -------------------------------------------------------------------------------- /src/WeTime/SDK/Python/PhalApiClient/python2.x/__init__.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | #gaoyiping (iam@gaoyiping.com) 2017-02-18 -------------------------------------------------------------------------------- /src/WeTime/SDK/Python/PhalApiClient/python3.x/__init__.py: -------------------------------------------------------------------------------- 1 | #-*- coding:utf-8 -*- 2 | #gaoyiping (iam@gaoyiping.com) 2017-02-18 -------------------------------------------------------------------------------- /src/WeTime/SDK/Ruby/PhalApiClient/tests/client_response.rb: -------------------------------------------------------------------------------- 1 | require_relative '../phalapi_client' 2 | require 'test/unit' 3 | 4 | class ClientResponseTest < Test::Unit::TestCase 5 | def test_new 6 | a_response = PhalApi::ClientResponse.new(400) 7 | assert_equal 400, a_response.ret 8 | 9 | a_response = PhalApi::ClientResponse.new(500, [], 'Server Error') 10 | assert_equal 500, a_response.ret 11 | assert_equal [], a_response.data 12 | assert_equal 'Server Error', a_response.msg 13 | end 14 | end 15 | -------------------------------------------------------------------------------- /src/WeTime/SDK/Ruby/PhalApiClient/tests/run_tests: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ruby ./client_response.rb 4 | 5 | ruby ./client_parser_json.rb 6 | 7 | ruby ./client.rb 8 | -------------------------------------------------------------------------------- /src/WeTime/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "phalapi/phalapi", 3 | "description": "A light-weight framework focus on how to develop API faster and simple.", 4 | "keywords": ["api"], 5 | "homepage": "http://www.phalapi.net", 6 | "license" : "GPL", 7 | "authors": [ 8 | { 9 | "name": "Dogstar Huang", 10 | "email": "chanzonghuang@gmail.com", 11 | "homepage" : "http://my.oschina.net/dogstar", 12 | "role": "Developer" 13 | } 14 | ], 15 | "require": { 16 | "php": ">=5.3.3", 17 | "another-vendor/package": "1.2.0" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/WeTime/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalapi/meet/304c732aa23cfdced6ac429c48e3941b9af4882e/src/WeTime/logo.jpg -------------------------------------------------------------------------------- /template.md: -------------------------------------------------------------------------------- 1 | # 附录A 接口服务文档模板 2 | 3 | ## 1、功能说明 4 | _// TODO: 请在这里放置简短的接口功能说明。_ 5 | 6 | ## 2、接口服务URL 7 | /?service=_接口服务名称_ + 公共参数(是否免登录态?) 8 | > 温馨提示:请将上面的接口服务名称,换成实际的名称。 9 | 10 | ## 3、接口服务参数 11 | 12 | 参数|必须|默认值|说明 13 | ---|---|---|--- 14 | user_id|是||用户id 15 | group_num|是||家庭号 16 | 17 | ## 4、返回结果 18 | 19 | ### 返回字段 20 | 参数|类型|说明 21 | ---|---|--- 22 | data.code|int|结果状态,0表示正常返回 23 | group_id|int|生成的家庭圈id 24 | 25 | ### 结果示例 26 | ``` 27 | { 28 | "ret": 200, 29 | "data": { 30 | "code": 0, // 对操作码进行说明 31 | ... ... // 更多字段的说明 32 | "msg": "" 33 | }, 34 | "msg": "" 35 | } 36 | ``` 37 | 38 | ### 请求示例 39 | _// TODO: 请放置一个接口请求的链接。_ 40 | --------------------------------------------------------------------------------