[Laravel] 趣编程之技术文章评论列表 Api 任务的开发心得

栏目: 编程语言 · PHP · 发布时间: 6年前

内容简介:[Laravel] 趣编程之技术文章评论列表 Api 任务的开发心得

完成跑通 Api 任务之后,领取到了我在趣编程的第一个撰写 Api 的任务,然而一脸茫然,什么是 Api?

API -> Application Programming Interface

应用程序编程接口。嗯,看起来还是很茫然!看看大老大的 CheckList 先把。。

[Laravel] 趣编程之技术文章评论列表 Api 任务的开发心得

关键点: Table

OK,前期执行了数据库的迁移和填充命令,拿到权限看了 table 之后,大概明白什么意思了。

Api 接口就是要给前端传数据呀!数据哪里来?数据库呗。那不就是一句 all() 就搞定的问题么?

没那么简单,先依葫芦画瓢

研究了一下目录结构,握草这是啥,握草这又是啥?看看别人的代码,控制器怎么就两行? Repositities 什么鬼? Transformer 什么鬼? Entities 又是什么鬼??

万变不离其宗,先从路由着手吧。

$api->get('articles/{article_id}/getComments', 'ArticleController@getComments'); 
 

通过 url 访问控制器里的 getComments 方法。

ok,创建了 getComments 方法,然后呢?一脸茫然。。

看看别人的代码,先依葫芦画瓢吧。

Controller

public function __construct(ArticleCommentInterface $articleCommentInterface)
  {
    $this->ArticleCommentInterface = $articleCommentInterface;
  }
 
  public function getComment($article_id)
  {
    $comments = $this->ArticleCommentInterface->getArticleCommentById($article_id);
    return $this->response->collection($comments, new ArticleCommentTransformer());
  }
 

Interface

public function getComments();
 

Respositities

public function getComments()
{
  return ArticleComment::all()
}
 

Transformer

public function transform(Article $article)
  {
    return [
      'id'                   => $article->id,
       ...    
    ];
  }
 

Entities

 public function comments()
  {
    return $this->hasMany(ArticleComment::class, 'article_id', 'id');
  }
  ...
 

建立了无数个文件之后,心中万头草泥马飞奔而过,我就拿个数据,怎么要建立这么多文件。。。这 hasmany 是什么鬼,transform 为啥要 return 这一堆东西,Respositities 倒是懂了,数据库操作的地儿。Interface 则是接口,和 Respositities 绑定。在 Respositities 中实现 interface 的方法。熟悉面向对象的小伙伴懂得。

哦对了,测试数据需要提供 token。教程在这里

测试,完美!提交初审咯~

不合格!

你这些 article id,user id 给前端展示数字吗!把具体 title,username 返回!一堆数字是要造反吗!

打回重写

行,要具体数据是吧,那我就一个个 find 出来,一个个 select 出来,一个个 foreach 出来你满意了吧~

[Laravel] 趣编程之技术文章评论列表 Api 任务的开发心得

这样你总满意了吧?

不行,我不满意。这么多 find 是要造反吗?别人的代码怎么这么简洁? entities 的代码怎么没用?直接返回 json 还要 transformer 干什么?一条请求连接这么多次数据库,服务器不想要了?

没日没夜(在地铁拿着手机当小说看了一会儿)地钻研了 laravel 文档 ORM 模块,hasmany,belongsto 好像很厉害的样子哦哟

respositities 返回一个 collection 传给 transformer 那么 transformer 拿到了好多id数据

见证奇迹的时刻!

public function transform(ArticleComment $comments)
  {
    $articleInfo = $comments->article;
    $user = UserInfo::select('real_name')->find($articleInfo->created_user_id);
 
    return [
      'article_title'            => $articleInfo->title,
      'article_user'             => $user->real_name,
      'is_evaluator'             => $comments->is_evaluation,
      'comment_content'          => $comments->content,
      'comment_created_user'     => $comments->user,
      'replied_comment'          => $comments->reply,
      'replied_user'             => $comments->repliedUser,
      'created_at'               => $comments->created_at
    ];
  }
 

这里的 user,reply,replyuser 实际上,都是 entities 里的方法。通过 hasmany 实现了多表查询的功能,只要再接上select,想要什么字段就返回什么字段啦。然后根据 UI 图,你要啥,我都给!

这下子,才能提交初审哟

这个项目架构好像很厉害

[Laravel] 趣编程之技术文章评论列表 Api 任务的开发心得

大概是这样的一个流程吧。

当然这个 Api 还有不足的地方,比如没有实现分页。关于分页,咱们有得聊。下回见喽~


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

HTTP Essentials

HTTP Essentials

Stephen A. Thomas、Stephen Thomas / Wiley / 2001-03-08 / USD 34.99

The first complete reference guide to the essential Web protocol As applications and services converge and Web technologies not only assume HTTP but require developers to manipulate it, it is be......一起来看看 《HTTP Essentials》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换