标签: apiclient

用于创建 REST API 的动态 Ruby OpenAPI/Swagger 客户端的帮助程序

我使用Bravado为 petstore 创建 REST API 的 Python 客户

我需要执行相同的操作来获取 REST API 的动态 Ruby 客户端。

  • 我在操作系统集成 Swagger 页面中看到了一系列工具,但其中大多数似乎是使用 Swagger 进行自动化测试或创建 Swagger/openapi API,而不是创建使用 Swagger API 的客户端。

  • Svelte是上面列表中的“来自 Swagger JSON 规范的动态 Ruby API 客户端”。它可能是一个很好的候选者,看起来与我已经使用的Bravado Python 库类似,但是:

    • 看来请求参数验证仅针对基于 URL 的参数进行,因此它不会提供请求,以及针对 Swagger 2.0 规范的响应验证,如下所示
    • Svelte 返回 Faraday::Request 而不是模型实例。
  • Ruby gem OpenAPI是官方的 Ruby 包装器,这正是我们正在寻找的,但目前还没有任何文档 Cf. 主要自述文件:“Active dev. 文档即将推出”
  • Excon(感谢 @kevin-burnett 指出它)没有为 Swagger 描述的 API 提供自动包装器,它是一个 HTTP 客户端,对应于 Python 的Requests,因此是一个手动使用 API 的库。

下面是 Python …

ruby swagger apiclient openapi bravado

8
推荐指数
1
解决办法
2719
查看次数

python安装模块apiclient

新的python,并尝试安装模块"apiclient",因为我的ide pycharm无法识别导入:

from apiclient.discovery import build
Run Code Online (Sandbox Code Playgroud)

我试过的:

  1. pip安装apiclient
  2. 手动下载包

https://developers.google.com/api-client-library/python/start/installation#system-requirements 然后我将其解压缩到

/Users/nirregev/anaconda/bin/google-api-python-client-1.5.0
Run Code Online (Sandbox Code Playgroud)

并在我的mac终端python setup.py安装上运行它,但仍然pycharm无法识别此模块.根据pycharm我安装了以下解释器:

/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5
/Users/nirregev/anaconda/bin/python
/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
Run Code Online (Sandbox Code Playgroud)

python install pip google-api apiclient

7
推荐指数
1
解决办法
2万
查看次数

Django APIClient登录不起作用

我在单元单元测试中使用Django Rest Framework API进行身份验证时遇到问题。通过浏览器访问系统时,系统可以按预期工作。但是,在以下端点向以下类发送放置请求时,我收到401 HTTP状态:

class UserDetail(RetrieveModelMixin, DestroyModelMixin, UpdateModelMixin, GenericViewSet):
    authentication_classes = (BasicAuthentication, TokenAuthentication)
    permission_classes = IsAuthenticated,
    queryset = CustomUser.objects.all()
    serializer_class = UserSerializer
Run Code Online (Sandbox Code Playgroud)

下面的测试如下:

class AccountTests(APITestCase):

    def setUp(self):
        self.user = CustomUser.objects.create_user(email="user1@test.com", password="password1", is_staff=True)
        self.user.save()
        self.user = CustomUser.objects.get(email="user1@test.com")
        self.client = APIClient()

    def test_add_name(self):
        self.client.login(email="user1@test.com", password='password1')
        url = reverse('customuser-detail', args=(self.user.id,))
        data = {'first_name': 'test', 'last_name': 'user'}

        self.client.login(email="user1@test.com", password='password1')
        response = self.client.put(url, data, format='json')

        self.assertEqual(response.status_code, status.HTTP_200_OK)
Run Code Online (Sandbox Code Playgroud)

当打印response.data时,我收到:

{u'detail': u'Authentication credentials were not provided.'}
Run Code Online (Sandbox Code Playgroud)

client.login(...)方法返回true,但是凭据似乎未附加到标头。我在IsAuthenticated权限类中的实验有一个request.user = AnonymousUser。在BasicAuthentication类中,auth =无。

我是否缺少在settings.py中使用BasicAuth的东西?甚至在测试本身中?

谢谢。

authentication django rest frameworks apiclient

5
推荐指数
1
解决办法
1284
查看次数

APIClient PUT 调用中的查询参数

我有一个 API 端点,我想对其进行 PUT 调用,该调用需要正文和查询参数。我使用 Django 的测试客户端在测试用例(文档)中调用我的端点。

我在文档中读到,对于 GET 调用,查询参数是使用 argument 引入的data。我还读到,对于 PUT 调用,参数data代表主体。我错过了如何在 PUT 调用中添加查询参数的文档。

特别是,这个测试用例失败了:

data = ['image_1', 'image_2']
url = reverse('images')
response = self.client.put(url, 
                           data=data, 
                           content_type='application/json', 
                           params={'width': 100, 'height': 200})
Run Code Online (Sandbox Code Playgroud)

这个测试用例通过了:

data = ['image_1', 'image_2']
url = reverse('images') + '?width=100&height=200'
response = self.client.put(url, 
                           data=data, 
                           content_type='application/json')
Run Code Online (Sandbox Code Playgroud)

换句话说:这种手动 URL 构建真的有必要吗?

django django-testing apiclient

5
推荐指数
1
解决办法
4175
查看次数

Django APIClient 发布空

我正在为帖子视图编写测试。它确实有效,但是当我尝试使用 APIClient.post 发布到它时,我得到 QueryDict: {}。这是测试:

class SMSCreateData(APITestCase):
...
    def test_SMS(self):
        ...
        postData = {'Body': string, 'From': phNum.phone_number}
        self.client.post(reverse('SMS-data'), postData)
Run Code Online (Sandbox Code Playgroud)

这是视图:

def SMSSubmitDataPointView(request):
...
    try:
        print request.POST
...
Run Code Online (Sandbox Code Playgroud)

python testing django view apiclient

3
推荐指数
1
解决办法
1311
查看次数