phalapi-进阶篇1(Api,Domain,和Model)

简介:

phalapi-进阶篇1(Api,Domain,和Model)

前言

先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架.

本小节已经步入了进阶篇,在进阶篇中会着重谈论一些框架中运用的一些好的思想并且进行解读,本小节主要是讲解在Phalapi框架中推荐使用的三层结构Api+Domain+Model将从各个角度和整体角度进行讲解.

附上:

官网地址:http://www.phalapi.net/

开源中国Git地址:http://git.oschina.net/dogstar/PhalApi/tree/release

1. Api+Domain+Model

其实这样的三层结构和java中的web+service+dao比较像只是说web和api一个进行页面显示一个不进行页面显示这个区别,在着重讲一下这三层在Phalapi中分工是怎么样的,他们分别担当者什么样的角色,需要做什么样的事情.

1.1 Api层

为什么说Api层像java中的web层呢,因为他们有一个共同的特性就是接受请求和返回结果.只是可能说java中没有那么强烈,它会通过控制器吧请求转发到service层处理好了拿到结果在展示页面,所以Api更像担当这控制器的作用.

Api层中需要做的事情如下:

  1. 注册接口/定义接口和控制请求参数

    这是首先要做的事情,和在web中的url一样,然后就是添加需要接受的参数以及对参数需要的验证如下:

     public function getRules(){
         return array(
             'index' => array(   //定义接口名
                 //添加参数验证机制
                 'username' => array('name' => 'username', 'default' => 'PHPer',),
             ),
     );
    

    }

  2. 进行业务/逻辑的拼接

    在这里进行业务/逻辑拼接,举个例子比如说是查询列表接口需要做两件事情,第一验证用户(是否存在是否有权限),第二查询出应该返回的列表,应该是如下样式

      //验证用户
     $Domain_Developers = new Domain_Developers();
     $Domain_Developers->checkDev($this->dId);
     //获取用户的APP列表
     $Domain_App = new Domain_App();
     $Domain_App->getMyAppList($this->dId);
    
  3. 返回结果

    返回结果就比较简单了就是把你经过上面拼接处理后获得的数据返回,如下:

      return $data;
    

1.2 Domain层

Domain层主要负责的是具体的业务实现拿用户验证,一个Domain方法就是一个小的业务具体实现(注意尽量吧业务划分的小一点方便通用)

/**
* 用户验证
*/
public function checkDev($dId){
    //通过ID 获取用户
    $Model_Developers = new Model_Developers();
    $dev              = $Model_Developers->checkDevdId($dId);
    //用户不存在处理
    if(!$dev){
        throw new PhalApi_Exception_BadRequest(T('No Dev'), -1);
    }
}

1.3 Model层

Model层其实无需多讲也就是把数据库操作单独提炼出来,统一处理如下

/**
 * 验证用户存不存在
 */
public function checkDevdId($dId){
    return $this->getORM()->select('dId')->where('dId', $dId)->fetch();
}

2. 三层结合使用的好处

  1. 结构清晰,互不干扰

    就我个人感觉来说,在实际开发中使用这样的三层结构带来的最大的好处在于结构清晰,为什么这么说,因为每一层需要做的事情就是非常独立的,你永远不会在API层中看到数据操作的代码,所以在排查问题的时候是数据出了问题肯定不会去API层里面去找问题,非常方便与错误的定位,再者就是代码可读性非常高,相对于mvc框架来说这样的好处是非常明显的.

  2. 高度解耦,灵活高可用

    带来的第二个很重要的好处就是解耦和高可用,高可用体现在,Api可以重复利用Domain,Domain可以重复利用Model,可以减少很多不必要的代码量,而且互相的关系仅仅只是拼接所以除非是结果会互相影响的情况下就实现了解耦.

  3. 分工合作,提高效率

    在有这样的一套规范之后在分工和做的,对方不需要去看你的代码具体实现了什么,只需要看你这个方法干了什么,直接拿起来用就可以了,当然是在业务划分成小块的情况下,而且可以很明确的划分出来模块,当你需要用到对方的模块的时候只需要让对放提供,这样可以增加模块的专注性从而提高合作开发的效率

3. 总结

其实在刚刚接触这个框架的时候我也是特别不能理解这样划分的作用,在后面的开发中以及和别人的交流冲进行了一些尝试,发现确实这样用起来有很多的好处,也希望今天的教程也能让大家理解,这样的一种规范可以带来很多的好处并且尝试的去尝试和使用.

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

相关文章
|
JSON .NET API
Asp.Net Web API 2第十五课——Model Validation(模型验证)
原文:Asp.Net Web API 2第十五课——Model Validation(模型验证) 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文参考链接文章地址http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api 当客户端发送数据给你的Web API时,你通常希望在做其它处理之前先对数据进行验证。
998 0
|
JSON .NET API
Asp.Net Web API 2第十五课——Model Validation(模型验证)
前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文参考链接文章地址http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api 当客户端发送数据给你的Web API时,你通常希望在做其它处理之前先对数据进行验证。
1039 0
|
1月前
|
机器人 API Python
智能对话机器人(通义版)会话接口API使用Quick Start
本文主要演示了如何使用python脚本快速调用智能对话机器人API接口,在参数获取的部分给出了具体的获取位置截图,这部分容易出错,第一次使用务必仔细参考接入参数获取的位置。
|
21天前
|
存储 JSON API
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者
——在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦! 淘宝API接口(如淘宝开放平台提供的API)允许开发者获取淘宝商品的各种信息,包括商品详情。然而,需要注意的是,直接访问淘宝的商品数据API通常需要商家身份或开发者权限,并且需要遵循淘宝的API使用协议。
淘系API接口(解析返回的json数据)商品详情数据解析助力开发者
|
30天前
|
SQL 存储 数据处理
|
1月前
|
XML JSON API
RESTful API设计最佳实践:构建高效、可扩展的接口
【8月更文挑战第17天】RESTful API设计是一个涉及多方面因素的复杂过程。通过遵循上述最佳实践,开发者可以构建出更加高效、可扩展、易于维护的API。然而,值得注意的是,最佳实践并非一成不变,随着技术的发展和业务需求的变化,可能需要不断调整和优化API设计。因此,保持对新技术和最佳实践的关注,是成为一名优秀API设计师的关键。
|
1月前
|
监控 API 数据安全/隐私保护
​邮件API触发式接口分析?邮件API接口好评榜
邮件API在企业通信和营销中至关重要,通过自动化邮件发送流程提升效率与客户满意度。本文解析邮件API触发式接口,即基于特定事件(如用户注册、购买产品)自动发送邮件的技术,能显著加快企业响应速度并增强用户体验。推荐市场上的优秀邮件API产品,包括SendGrid、Mailgun、Amazon SES、Postmark及新兴的AOKSend,它们各具特色,如高发送率、详细分析工具、灵活配置、强大的日志功能及用户友好的API接口,帮助企业根据不同需求选择最合适的邮件API解决方案。
|
1月前
|
存储 算法 Oracle
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
55 8
|
16天前
|
测试技术 API 数据库
电商API接口定制与开发系列之——商品详情接口介绍
——在成长的路上,我们都是同行者。这篇关于API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦! 在电商API接口定制与开发系列中,商品详情接口是至关重要的一部分,它直接关系到用户浏览商品、获取商品信息的关键环节。以下是对商品详情接口的详细介绍:
|
21天前
|
存储 数据采集 API
提升店铺好评秘籍:淘宝商品评论接口与电商 API 接口的深度解析
该接口名为item_review,用于获取淘宝商品评论信息,支持HTTP GET或POST请求,体验API为c0b.cc/R4rbK2。主要请求参数包括商品ID(num_iid)、排序方式(sort)、页码(page)。响应参数涵盖评论内容(rate_content)、评论日期(rate_date)、评论图片(pics)、买家昵称(display_user_nick)、商品属性(auction_sku)