我正在编写一个简单的API,并在此API之上构建一个简单的Web应用程序.
因为我想直接"使用我自己的API",所以我首先使用Googled在StackOverflow上找到了这个答案,它完美地回答了我的初始问题:使用我自己的Laravel API
现在,这很好用,我可以通过以下方式访问我的API:
$request = Request::create('/api/cars/'.$id, 'GET');
$instance = json_decode(Route::dispatch($request)->getContent());
Run Code Online (Sandbox Code Playgroud)
这很棒!但是,我的API还允许您向GET查询字符串添加可选字段参数,以指定应返回的特定属性,例如:
http://cars.com/api/cars/1?fields=id,color
Run Code Online (Sandbox Code Playgroud)
现在,我在API中实际处理此问题的方式与此类似:
public function show(Car $car)
{
if(Input::has('fields'))
{
//Here I do some logic and basically return only fields requested
....
...
}
Run Code Online (Sandbox Code Playgroud)
我会假设我可以做类似于之前的查询字符串无参数方法,类似这样的事情:
$request = Request::create('/api/cars/' . $id . '?fields=id,color', 'GET');
$instance = json_decode(Route::dispatch($request)->getContent());
Run Code Online (Sandbox Code Playgroud)
但是,它似乎并非如此.简而言之,在单步执行代码之后,似乎Request正确创建了对象(并且它正确地拉出了fields参数并为其分配了id,颜色),并且Route似乎被调度好了,但是在我的API控制器本身内我不知道如何访问field参数.使用Input::get('fields')(这是我用于"普通"请求的东西)什么都不返回,我很确定这是因为静态Input引用或确定了进入的初始请求,而不是我从"内部"手动调度的新请求.应用本身.
所以,我的问题是我应该怎么做呢?难道我做错了什么?理想情况下,我想避免在我的API控制器中做任何丑陋或特殊的事情,我希望能够将Input :: get用于内部调度的请求,而不必进行第二次检查等.
我有兴趣使用Varnish缓存/限制/等响应我正在创建的RESTful API.我可能过于松散地使用术语/首字母缩略词"HMAC",但我的意思是每个API API请求都应包含一个标题,其中包含客户端通过散列部分请求(包括时间戳)计算的哈希值共享秘密.然后,服务器使用来自请求的相同成分计算此相同的散列,并确定请求是否有效并应响应.
这很好用,但现在我想使用Varnish来缓存我的API响应.HMAC的性质要求每个请求计算散列以验证用户是谁,但返回的实际响应是相同的 - 因此API调用的内容非常容易缓存.
我想要的(我假设这可以实现,我只是不知道如何)是将身份验证任务传递给后端,以某种方式告诉Varnish"是的,继续并响应此请求"或"不,不要回复此请求"然后从那里让Varnish确定是否可以从缓存中提供请求.
更理想的情况是,做一些稍微更美好的事情,并允许Varnish自己处理身份验证,或者将HMAC处理传递到比后端更快的东西.例如,API可能将客户端密钥/公钥存储在redis缓存中,然后Varnish可能实际使用Redis中的值计算哈希本身.
我正在开发一个"for fun"项目,我希望将其作为一个"有趣"的开源项目发布.我已经建立了一个Arduino网络连接订单通知器,我正在建立Magento adminhtml接口方面.对于我正在做的事情,这可能看起来过于复杂,但是这有其他对我有用的应用程序,我正在尝试学习新的东西.
话虽如此,我在Magento后端的"Reports"旁边创建了一个新的"Arduino"adminhtml菜单项.有些时候Arduino的特定反馈可能会自动禁用模块,在这种情况下,我的目标是从页面中删除菜单项,除非有其他子菜单项,在这种情况下我只删除模块特定的菜单项.同样,对于这个项目来说,这似乎不太现实,但是为了尽可能"正确"做到这一点,这是我的目标,让其他人可以添加"Arduino"菜单项的可能性开放.
现在,我有这个工作伟大,没有问题,如果关闭IF缓存.这是另一种说法,"这不起作用,因为显然每个人都会打开缓存." 也就是说,这是我开始使用的代码:
/**
* Used to disable the Arduino menu option dynamically.
*
* @param Varient_Event_Observer $observer
*/
public function controllerActionLayoutGenerateBlocksBefore(Varien_Event_Observer $observer)
{
//We only want to disable the arduino menu if our module was specifically disabled in backend
if(Mage::helper('mynamespace_myarduinomodule')->isDisabled())
{
/* @var $arduinoItems Varien_Simplexml_Element */
/* @var $parent Varien_Simplexml_Element */
$arduinoItems = Mage::getSingleton('admin/config')->getAdminhtmlConfig()->getNode('menu/arduinomenu/children');
$parent = Mage::getSingleton('admin/config')->getAdminhtmlConfig()->getNode('menu');
//If there are other menu options in the arduino menu option we only want to hide
//the menu items …Run Code Online (Sandbox Code Playgroud) 我们有许多在 EC2 中运行 Solr 的 EC2 实例,我们过去曾通过另一个应用程序使用过这些实例。我们希望朝着允许用户(通过网络浏览器)直接访问 Solr 的方向发展。
如果 Solr 没有“前面”的东西,这会导致安全风险,因此我们选择尝试使用 ELB(特别是应用程序负载均衡器)作为一种简单且免维护的方式来防止某些请求命中 SOLR(即防止公共删除或以其他方式修改 Solr 中的文档)。
这很有效,但我们意识到我们需要处理CORS问题。换句话说,我们需要为来自浏览器的请求添加适当的标头。我还没有看到使用 Application Load Balancer 做到这一点的方法,但我想知道是否有可能做到这一点。如果这是不可能的,我希望作为额外的建议添加这些标题的更简单和最简单的方法。我们真的真的很讨厌在 Solr 前面添加像 nginx 这样的东西,因为这样我们就有了额外的冗余来处理,更多的服务器等等。
谢谢!
我正在努力创造我希望有一天会成为Magento公开扩展的部分(这部分我提到因为我在这里做"正确的事"对我来说很重要).我想做的其中一件事是在默认的Magento仪表板中添加一个框,基本上是一个新的"框",与"前5个搜索术语"完全相同,除了我自己的内容.我希望我的新自定义框是显示的最后一个框(理想情况下).
我遇到的问题是,负责呈现仪表板的模板会调出要呈现的特定块,并且这些块嵌套在html中.换句话说,通常存在一个区域,其中子块将被渲染成一个合理的HTML元素,在这种情况下,似乎会呈现特定的块.以下是/app/design/adminhtml/default/default/template/dashboard/index.phtml的内容
<div class="dashboard-container">
<?php echo $this->getChildHtml('store_switcher') ?>
<table cellspacing="25" width="100%">
<tr>
<td><?php echo $this->getChildHtml('sales') ?>
<div class="entry-edit">
<div class="entry-edit-head"><h4><?php echo $this->__('Last 5 Orders') ?></h4></div>
<fieldset class="np"><?php echo $this->getChildHtml('lastOrders'); ?></fieldset>
</div>
<div class="entry-edit">
<div class="entry-edit-head"><h4><?php echo $this->__('Last 5 Search Terms') ?></h4></div>
<fieldset class="np"><?php echo $this->getChildHtml('lastSearches'); ?></fieldset>
</div>
<div class="entry-edit">
<div class="entry-edit-head"><h4><?php echo $this->__('Top 5 Search Terms') ?></h4></div>
<fieldset class="np"><?php echo $this->getChildHtml('topSearches'); ?></fieldset>
</div>
</td>
<td>
<div class="entry-edit" style="border:1px solid #ccc;">
<?php echo $this->getChildHtml('diagrams') ?>
<?php if (is_array($this->getChild('diagrams')->getTabsIds())) : …Run Code Online (Sandbox Code Playgroud)