ApiProblem

2025-12-07 0 479

ApiProblem

该库提供了HTTP API的IETF问题详细信息的简单直接实现,RFC 9457。

RFC 9457是一个简单的规范,用于从Web上的RESTFUL API中格式化错误响应。该库提供了一种与该规范进行交互的简单方便方法。它支持JSON和XML变体中的生成和解析RFC 9457消息。

产生响应

你说什么?有人向您的API发送了不良要求?告诉他们这是一个问题!

ApiProblem ;

$problem = new ApiProblem (\”You do not have enough credit.\”, \”http://*exam*p*le.com/probs/out-of-credit\”);
// Defined properties in the API have their own setter methods.
$problem
->setDetail(\”Your current balance is 30, but that costs 50.\”)
->setInstance(\”http://exampl*e.**net/account/12345/msgs/abc\”);
// But you can also support any arbitrary extended properties!
$problem[\’balance\’] = 30;
$problem[\’accounts\’] = [
\”http://exam*p*le.*net/account/12345\”,
\”http://*exam**ple.net/account/67890\”
];

$json_string = $problem->asJson();

// Now send that JSON string as a response along with the appropriate HTTP error
// code and content type which is available via ApiProblem ::CONTENT_TYPE_JSON.
// Also check out asXml() and ApiProblem ::CONTENT_TYPE_XML for the angle-bracket fans in the room.\”>

 use Crell \\ ApiProblem \\ ApiProblem ;

$ problem = new ApiProblem ( \" You do not have enough credit. \" , \" http://*exam*p*le.com/probs/out-of-credit \" );
// Defined properties in the API have their own setter methods.
$ problem
  -> setDetail ( \" Your current balance is 30, but that costs 50. \" )
  -> setInstance ( \" http://exampl*e.**net/account/12345/msgs/abc \" );
// But you can also support any arbitrary extended properties!
$ problem [ \' balance \' ] = 30 ;
$ problem [ \' accounts \' ] = [
  \" http://exam*p*le.*net/account/12345 \" ,
  \" http://*exam**ple.net/account/67890 \"
];

$ json_string = $ problem -> asJson ();

// Now send that JSON string as a response along with the appropriate HTTP error
// code and content type which is available via ApiProblem ::CONTENT_TYPE_JSON.
// Also check out asXml() and ApiProblem ::CONTENT_TYPE_XML for the angle-bracket fans in the room.

或者,更好的是,您可以为特定问题类型的ApiProblem子类apiproblem(由于应该将类型和标题放在一起并相对固定),然后只填充您自己的特定于错误的数据即可。就像扩展例外一样!

如果您使用的是想要执行自己的JSON序列化的库或框架,那么这也得到了完全支持。 ApiProblem实现\\JsonSerializable ,因此您可以将其直接传递到json_encode()就好像它是裸阵列一样。

 $ response = new MyFrameworksJsonResponse ( $ problem );

// Or do it yourself
$ body = json_encode ( $ problem );

发送答复

您可能会使用PSR-7进行响应。这就是为什么使用您选择的PSR-17工厂将您的ApiProblem对象转换为PSR-7 ResponseInterface对象的实用程序。像这样:

ApiProblem\\HttpConverter;

$factory = getResponseFactoryFromSomewhere();

// The second parameter says whether to pretty-print the output.
$converter = new HttpConverter($factory, true);

$response = $converter->toJsonResponse($problem);
// or
$response = $converter->toXmlResponse($problem);\”>

 use Crell \\ ApiProblem \\ HttpConverter ;

$ factory = getResponseFactoryFromSomewhere ();

// The second parameter says whether to pretty-print the output.
$ converter = new HttpConverter ( $ factory , true );

$ response = $ converter -> toJsonResponse ( $ problem );
// or
$ response = $ converter -> toXmlResponse ( $ problem );

这给了一个彻底的响应对象,准备回到客户端。

收到回复

您是否正在向正在响应API问题错误响应的API发送消息?没问题!您可以轻松地处理该响应:

ApiProblem ;

$problem = ApiProblem ::fromJson($some_json_string);
$title = $problem->getTitle();
$type = $problem->getType();
// Great, now we know what went wrong, so we can figure out what to do about it.\”>

 use Crell \\ ApiProblem \\ ApiProblem ;

$ problem = ApiProblem :: fromJson ( $ some_json_string );
$ title = $ problem -> getTitle ();
$ type = $ problem -> getType ();
// Great, now we know what went wrong, so we can figure out what to do about it.

(它也适用于fromxml()!)

安装

像其他任何作曲家包一样安装ApiProblem :

 composer require crell/api-problem

有关更多详细信息,请参见作曲家文档。

安全

如果发现任何与安全有关的问题,请使用GitHub安全报告表,而不是问题队列。

学分

  • [Larry Garfield] [Link-aTHOTOR]
  • [所有贡献者] [链接构造者]

执照

该库是根据麻省理工学院许可证发布的。简而言之,“让版权声明完好无损,否则会很开心。”有关更多信息,请参见许可证。

贡献

接受请求的请求!目标是完全符合IETF规格。

下载源码

通过命令行克隆项目:

git clone https://github.com/Crell/ApiProblem.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 ApiProblem https://www.zuozi.net/31913.html

zmNinja
上一篇: zmNinja
supervisor
下一篇: supervisor
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务