首页
学习
活动
专区
圈层
工具
发布

在 Laravel 应用中构建 GraphQL API

代码示例:产品列表和用户列表的 API 例子 昨天我们学习了 在 Visual Code 中搭建 Laravel 环境,现在我们来学习 Facebook 的 GraphQL 。...graphql.org GraphQL 可以提升 API 调用的灵活性,我们可以像写数据库查询语句一样来请求 API 来获取所需要的数据,这对构建复杂的 API 查询来说非常有用。...安装 Laravel 使用下面命令安装最新版本的 Laravel : # 在命令行中执行 composer global require "laravel/installer" laravel new...创建查询和定义 GraphQL 的类型 GraphQL 中的查询与 Restful API 中的末端路径查询是一样的,查询只是用于获取数据,以及创建、更新、删除操作。...GraphQL 中的 类型 用于定义查询中每个字段的类型定义,类型会帮助我们格式化查询结果中的有格式的字段,例如布尔类型,字符串类型,浮点类型,整数类型等等,以及我们的自定义类型。

5.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    跨域资源共享(CORS)在ASP.NET Web API中是如何实现的?

    在《通过扩展让ASP.NET Web API支持W3C的CORS规范》中,我们通过自定义的HttpMessageHandler自行为ASP.NET Web API实现了针对CORS的支持,实际上ASP.NET...只有在请求通过授权检查的情况下,由CorsResult得到的CORS响应报头才会被添加到此HttpResponseMessage的报头集合中。...result.ErrorMessages.ToArray())); 38: } 39: } 40: //针对非预检请求 41: //CORS报头只有在通过授权检验情况下才会被添加到响应报头集合中...CorsResult得到的CORS响应报头添加到此HttpResponseMessage的报头集合中。...对于非预检请求来说,只有在它通过了资源授权检验的情况下,我们才会调用扩展方法AddCorsHeaders将从CorsResult得到的CORS报头添加响应的报头集合中。

    3.4K110

    通过 Laravel 创建一个 Vue 单页面应用(三)

    之前在 通过 Laravel 创建一个 Vue 单页应用(二) 中完成了 UsersIndex 组件异步地从 API 中加载用户。...创建一个真正的用户端点 我们将创建一个 UsersController 使用 Laravel 5.5 新的 API 资源 来返回 JSON 数据。...我们在命令行中同时创建控制器和 User API 资源类: php artisan make:controller Api/UsersController php artisan make:resource...回调传递两个参数:一个错误和来自API调用的响应。 我们的 getUsers() 方法接受一个 page 变量,该变量最终作为查询字符串参数出现在请求中。...,可以从数据库中获取真实数据,还有一个简单的分页组件,该组件在后端使用 Laravel 的 API 模型资源进行简单的分页链接并将数据包装在 数据 键中。

    7.1K10

    代码分层设计实践与总结

    简介 见过很多PHP开发者的代码,在代码分层上面都不是很注重。一般都是控制器负责所有的业务逻辑,在控制器中调用模型做数据操作、验证数据也在控制器中等等情况。这样的做法怎么说呢?...相关技术 Laravel资源控制器、Laravel模型、PHP对象接口 实现思路 大致实现的思路如下: ?...image.png 为了保证在controller、service、repository层中的相关方法名称以及返回参数格式都保持一致,在每一个层,都定义一个接口,接口中的方法都定义好参数格式以及返回值类型...在api.php路由文件定义如下格式: 资源路由,我们直接定义一个路由规则,增删改查等接口方式,我们就自动实现并且能够规范团队中的接口,同时也符合RESTful API的规范。

    1.6K30

    PHP实现代码分层设计实践与总结

    简介 见过很多PHP开发者的代码,在代码分层上面都不是很注重。一般都是控制器负责所有的业务逻辑,在控制器中调用模型做数据操作、验证数据也在控制器中等等情况。这样的做法怎么说呢?...相关技术 Laravel资源控制器、Laravel模型、PHP对象接口 实现思路 大致实现的思路如下: [Snipaste_2021-03-20_22-29-16] // uml图 @startuml...[Snipaste_2021-03-20_22-38-50] 为了保证在controller、service、repository层中的相关方法名称以及返回参数格式都保持一致,在每一个层,都定义一个接口...在api.php路由文件定义如下格式: 资源路由,我们直接定义一个路由规则,增删改查等接口方式,我们就自动实现并且能够规范团队中的接口,同时也符合RESTful API的规范。

    2.9K10

    Laravel Mix 初探

    简介 针对 Laravel 优化了的 Laravel Mix, 提供了高效优雅的 API,用于使用几个常见的 CSS 和 JavaScript 预处理器为应用定义 Webpack 构建步骤,基本可以使到...Laravel 上面的安装 Laravel 5.4 以上默认已经安装了 Laravel Mix, 在开发机配置了node 和 npm的基础上,仅仅只需要运行下面的命令即可安装: npm install...Laravel Mix 还有更多配置: // 完整的API // mix.js(src, output); // mix.react(src, output); 资源或者 Laravel 的 PHP 文件时,浏览器会即时刷新页面以响应你的更改。...Mix实际上已经预先配置好了 webpack.config.js文件,它会在 Laravel Mix 运行时被引用,如果需要添加一些自定义配置,可以将其他 webpack 配置传递给 mix.webpackConfig

    5.3K60

    结合 Bootstrap + Vue 组件实现 Laravel 异步分页功能

    在日常开发中,对数据库查询结果进行分页也是一个非常常见的需求,我们可以基于之前介绍的查询方法和前端 HTML 视图实现分页功能,不过从 Laravel 5.3 开始,Laravel 框架就已经为我们提供了非常完整的分页解决方案...以文章首页列表为例,先准备好一个资源控制器 PostController 并定义好对应路由,而这些工作我们已经在控制器教程中已经做好。...然后,我们在 routes/api.php 中定义一个指向该控制器方法的 API 路由: Route::get('/posts/fetch', 'PostController@fetch'); 这样,...我们就可以测试下后端这个 API 接口了,在浏览器中请求 http://blog.test/api/posts/fetch,返回 JSON 格式数据如下: paginator 对应字段描述信息如下:...使用prop传递属性 我们在父视图中声明组件的时候传递了一个属性 page-type 到组件,用于标识该组件应用的页面类型,然后在组件中,我们可以通过 props 声明从父视图/组件中传递进来的属性(转化为驼峰格式

    9.8K20

    Laravel 6.7.0 版本发布,支持不加载关联关系

    Laravel 开发团队本周发布了 v6.7.0 版本,新增了一些新特性,以及对之前版本问题的修复。...邮件传输失败时,现在会抛出错误来取代之前的静默失败,此更新无需调整任何上层业务代码: 此外,一个比较重要的更新是 Eloquent 模型类现在还新增了 withoutRelations() 方法,用来支持在队列任务中不加载关联关系...我们可以在队列任务的构造函数中调用该方法: /** * Create a new job instance....资源集合现在可以通过调用 preserveQueryParameters() 方法在 API 资源分页时保留查询字符串: return MyResourceCollection::make($repository...资源分页时保留查询字符串(#30745, e92a708) 修复问题 修复基于字符串的数据库验证规则中的显式模型问题(#30790) 修复 Routing\RedirectController() 问题

    2.1K20

    Laravel 开发 RESTful API 的一些心得

    laravel用的是中划线(-),因为谷歌收录时,按中划线划分关键字,国内的是按下划线(_)收录,具体看自己了,我是喜欢下划线 >_< 更多看这里: 路由命名规范(https://laravel-china.org...集合的使用 Resources::collection()发现,特别好用 >_< 不得不说,多对多关联时, Laravel处理得太好了,条件关联:https://laravel-china.org/docs...在上面这个例子中,如果关联没有被加载,则 posts 键将会在资源响应被发送给客户端之前被删除。 在有不确定是否输出关联数据时,这是一个很有用的功能!!!...响应输出 当时在 laravel-china 看到的这个帖子,然后觉得这个方式不错,所以自己也这样子,使用基类的方法统一响应输出。 异常 异常算是一大手笔了,处理好异常,可以让你的代码优雅很多。...在 edit.html写好之后,导出 json,然后粘贴到 api.json文件。 ?

    5K90

    laravel5.5功能尝鲜

    4 Package Auto Discovery功能 可以自动下载包中相关的文件,免去了手工下载配置的麻烦 使用方式:在composer.json中增加子节点extra 节点中的内容为一个下载的示例 "...命令 在以前的 laravel 版本中,我们自己创建 Artisan 命令的时候需要到 Kernel 文件中注册命令才可以生效,而在 5.5 的时候,Laravel 通过 load 的方法实现,直接就在生成命令之后可以使用命令了...可以看到执行结果 php artisan say-hello 13 Api Resource Laravel 5.5 引入了新的 API 支持:Api Resource ,这对于我们使用 Laravel...开发 API 应用的使用非常有用,我们可以快速方便的自定义 API 数据的各种格式和返回的字段等。...输入如下命令可以处理集合数据 artisan make:resource UserCollection 在app/Http/Resources文件夹下会生成一个UserCollection.php

    4K40

    Laravel集合的简单理解

    本篇文章给大家带来的内容是关于Laravel集合的简单理解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。...前言 集合通过 Illuminate\Database\Eloquent\Collection 进行实例,Laravel的内核大部分的参数传递都用到了集合,但这并不代表集合就是好的。...打回原型 如果你想将集合转换为数据,其使用方法也非常的简单 微信图片_20191121144450.png 在不过与考虑性能的情况下,可以使用Laravel集合,毕竟它将帮你完成数组操作的百分之九十的工作...diff 将集合与其它集合或纯 PHP 数组进行值的比较,然后返回原集合中存在而给定集合中不存在的值 each 迭代集合中的内容并将其传递到回调函数中 filter 使用给定的回调函数过滤集合的内容,...只留下那些通过给定真实测试的内容 first 返回集合中通过给定真实测试的第一个元素 groupBy 根据给定的键对集合内的项目进行分组 push 把给定值添加到集合的末尾 put 在集合内设置给定的键值对

    2.9K40

    JSON Web Token(JWT)教程:一个基于Laravel和AngularJS的例子

    当然,如果我们想避免使用JWE的额外开销,另一个选择是将敏感信息保留在我们的数据库中,并且在需要访问敏感数据时,使用我们的token进行额外的API调用。 为什么需要Web Tokens?...我们将创建一个示例API子域,以模拟跨域( Cross-origin)资源共享(CORS)。...它将被放置在我们的config/jwt.php文件中。然而,在生产环境中,我们不想在配置文件中使用我们的密码或API密钥。...laravel-cors 在我们composer.json 中Require the barryvdh/laravel-cors package 并更新我们的依赖。...从API子域中获取限制资源(跨域问题) 在下面JSON web token实例中,我们将采用不同的token验证方法。不同于使用jwt-auth中间件,我们将手动处理异常。

    35.6K10

    你可能需要了解下Laravel集合

    前言 集合通过 Illuminate\Support\Collection 进行实例,Laravel的内核大部分的参数传递都用到了集合,但这并不代表集合就是好的。...$collection = array(1,2,3); laravel对于collection也没有做任何复杂的事情,会在下一章 《Laravel源码解析之集合》,谢谢 打回原型 如果你想将集合转换为数据...,其使用方法也非常的简单 collect([1, 2, 3])->all(); ------> [1, 2, 3] 在不过与考虑性能的情况下,可以使用Laravel集合,毕竟它将帮你完成数组操作的百分之九十的工作...diff 将集合与其它集合或纯 PHP 数组进行值的比较,然后返回原集合中存在而给定集合中不存在的值 each 迭代集合中的内容并将其传递到回调函数中 filter 使用给定的回调函数过滤集合的内容,...只留下那些通过给定真实测试的内容 first 返回集合中通过给定真实测试的第一个元素 groupBy 根据给定的键对集合内的项目进行分组 push 把给定值添加到集合的末尾 put 在集合内设置给定的键值对

    2.1K30

    Laravel 开发 RESTful API 的一些心得

    laravel用的是中划线(-),因为谷歌收录时,按中划线划分关键字,国内的是按下划线(_)收录,具体看自己了,我是喜欢下划线 >_< 更多看这里: 路由命名规范 表单验证 可以使用控制器自带的表单验证...Resources 集合的使用Resources::collection()发现,特别好用 >_< 不得不说,多对多关联时,Laravel处理得太好了条件关联 Resources 在上面这个例子中...,如果关联没有被加载,则 posts 键将会在资源响应被发送给客户端之前被删除。...响应输出 当时在 laravel-china 看到的这个帖子,然后觉得这个方式不错,所以自己也这样子,使用基类的方法统一响应输出。 异常 异常算是一大手笔了,处理好异常,可以让你的代码优雅很多。...:laravel-api-helper 工作和API开发有关,用到其他有经验了再回来补补。

    1.4K10

    不使用全局变量在Python函数之间传递变量

    在Python中,你可以通过函数参数、返回值、全局变量、闭包、类属性等方式在函数之间传递变量。如果你不想使用全局变量,我们可以考虑多种方法来使用,具体的情况还要看实际体验。...问题背景在 Python 中,如果一个函数需要访问另一个函数中的局部变量,则需要使用全局变量。然而,使用全局变量会带来一些问题,例如:全局变量容易被意外修改,导致程序出现错误。...因此,在 Python 中,尽量避免使用全局变量。解决方案1、使用函数参数传递变量函数之间传递变量最简单的方法是使用函数参数。...def mhello(self): mtext = ment.get() mlabel2 = Label(mGui,text=mtext, fg = (b)) # color varible...我们可以使用闭包来在不同的函数之间传递变量。

    1.7K10

    分享一个 JSON 相关小需求的解决过程与思路

    起因 昨天同事问我,能不能在接口返回中不要将中文转成 Uncode 编码,因为这是 Laravel 框架做的事情,所以我们要实现这个效果无非就是在 json_encode 第二个参数中加入常量 JSON_UNESCAPED_UNICODE...解决方案1 既然最终出口是这么干的,那我立即想到一个简单的处理方式:在 public/index.php 中输出响应值前处理: public/index.php $response = $kernel-...继续探索 突然想到,我们的接口都是返回的是 Api Resource 模式,也就是说最后返回的都是 Illuminate\Http\Resources\Json\JsonResource 实例或者集合,...答案是可以: 在 Illuminate\Http\Resources\Json\JsonResource 中有一个 toResponse 方法: vendor/laravel/framework/src...终极解决方案 我想到了 Laravel 的 ternimate 中间件特性,然后发现不可行,因为你会发现在 public/index.php 中,ternimate 中间件的最后在响应输出之后,所以时机不合适

    1.2K20

    基于 Redis Geo 实现地理位置服务(LBS)中查找附近 XXX 的功能

    在此之前,学院君在基于 Laravel + Vue 构建前后端分离应用 这个项目中就已经实现过类似的 LBS 服务 —— 定位当前用户所在的城市然后显示该城市所有的咖啡店: 基于数据库进行地理位置查询...cafes Geo 结构中: Geo 底层使用的数据结构是 ZSET(有序集合),所以你可以在 Geo 上使用任何 ZSET 指令: 要删除某个 Geo 集合,使用 ZREM 指令即可,所以 Geo...集合中,这里将键名设置为 xueyuanjun.cafes: Redis::geoAdd('xueyuanjun.cafes', [$longitude, $latitude, $name]); 然后在查询附近咖啡店时...,先通过高德(或者百度)地图开放平台提供的定位 API获取用户的坐标位置信息,然后将这个坐标作为参数传递到 Redis 的 GEORADIUS 指令(这里使用圆形区域搜索): Redis::geoRadius...需要注意的是,在 LBS 应用中,无论是车、餐馆、还是人,数量可能都是以千万、亿级计,每个维度的数据和坐标信息存放在一个键中,会导致单个键值特别大,如果超过亿级规模,则需要键做拆分,比如国家、省,以降低单个键的大小

    4.5K20
    领券