django-api-versioning 0.1.3__py3-none-any.whl → 0.1.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django_api_versioning-0.1.3.dist-info → django_api_versioning-0.1.4.dist-info}/METADATA +61 -13
- {django_api_versioning-0.1.3.dist-info → django_api_versioning-0.1.4.dist-info}/RECORD +5 -5
- {django_api_versioning-0.1.3.dist-info → django_api_versioning-0.1.4.dist-info}/LICENSE +0 -0
- {django_api_versioning-0.1.3.dist-info → django_api_versioning-0.1.4.dist-info}/WHEEL +0 -0
- {django_api_versioning-0.1.3.dist-info → django_api_versioning-0.1.4.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: django-api-versioning
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.4
|
4
4
|
Summary: Django API versioning decorator provides a solution for managing multiple API versions within the Django framework, enabling versioning through URLs with backward compatibility and automatically registering routes.
|
5
5
|
Home-page: https://github.com/mojtaba-arvin/django-api-versioning
|
6
6
|
Author: Mojtaba Arvin
|
@@ -118,6 +118,11 @@ def users_view(request):
|
|
118
118
|
|
119
119
|
In this example, the `users_view` function is decorated with the endpoint decorator. This specifies that the view is accessible under version `2` of the API and **supports backward compatibility**. The `backward=True` flag as default ensures that users can also access the previous version (version `1`) at `/api/v1/account_app/users`.
|
120
120
|
|
121
|
+
```bash
|
122
|
+
api/v1/account_app/users [name='users_list_api']
|
123
|
+
api/v2/account_app/users [name='users_list_api']
|
124
|
+
```
|
125
|
+
|
121
126
|
#### Example for Class-Based Views (CBVs):
|
122
127
|
|
123
128
|
For class-based views, you can apply the decorator to methods such as `get`, `post`, or any other HTTP method you need to handle. Here’s an example:
|
@@ -142,11 +147,13 @@ If you have already installed [Django Rest Framework](https://www.django-rest-fr
|
|
142
147
|
|
143
148
|
```python
|
144
149
|
from rest_framework.views import APIView
|
150
|
+
from rest_framework.permissions import AllowAny
|
145
151
|
from rest_framework.response import Response
|
146
152
|
from django_api_versioning.decorators import endpoint
|
147
153
|
|
148
154
|
@endpoint("users", version=2, app_name='account_app', view_name="users_list_api")
|
149
155
|
class UsersAPIView(APIView):
|
156
|
+
permission_classes = [AllowAny]
|
150
157
|
|
151
158
|
def get(self, request):
|
152
159
|
return Response({"message": "API Version 2 Users"})
|
@@ -154,10 +161,12 @@ class UsersAPIView(APIView):
|
|
154
161
|
|
155
162
|
#### URL Generation Based on Versioning:
|
156
163
|
|
157
|
-
Once the decorator is applied, the URLs for your API will be generated based on the version specified in the decorator. For example, if the `API_MIN_VERSION` in your settings.py is set to `1` and the version in the decorator is set to `2`, the following URLs will be available:
|
164
|
+
Once the decorator is applied, the URLs for your API will be generated based on the version specified in the decorator. For example, if the `API_MIN_VERSION` in your `settings.py` is set to `1` and the version in the decorator is set to `2`, the following URLs will be available:
|
158
165
|
|
159
|
-
|
160
|
-
|
166
|
+
```bash
|
167
|
+
api/v1/account_app/users [name='users_list_api']
|
168
|
+
api/v2/account_app/users [name='users_list_api']
|
169
|
+
```
|
161
170
|
|
162
171
|
The `API_MIN_VERSION` setting ensures that users can access the API using different versions, providing backward compatibility. You can adjust which versions are considered valid by modifying the `API_MIN_VERSION` and `version` numbers in the decorators.
|
163
172
|
|
@@ -171,8 +180,10 @@ The `API_MIN_VERSION` setting ensures that users can access the API using differ
|
|
171
180
|
|
172
181
|
The generated URLs will be:
|
173
182
|
|
174
|
-
|
175
|
-
|
183
|
+
```bash
|
184
|
+
api/v1/users [name='users_list_api']
|
185
|
+
api/v2/users [name='users_list_api']
|
186
|
+
```
|
176
187
|
|
177
188
|
**Without `version`:** If you don't pass `version` in the decorator, like this:
|
178
189
|
|
@@ -182,7 +193,9 @@ The generated URLs will be:
|
|
182
193
|
|
183
194
|
API versioning will be disabled (`API_BASE_PATH` as prefix will be removed) for that view. The only URL generated will be:
|
184
195
|
|
185
|
-
|
196
|
+
```bash
|
197
|
+
users [name='users_list_api']
|
198
|
+
```
|
186
199
|
|
187
200
|
**Setting `backward=False`:** By default, the `backward` parameter is set to `True`, which ensures backward compatibility. If you explicitly set `backward=False`, like this:
|
188
201
|
|
@@ -192,7 +205,9 @@ API versioning will be disabled (`API_BASE_PATH` as prefix will be removed) for
|
|
192
205
|
|
193
206
|
The generated URL will be only version 2:
|
194
207
|
|
195
|
-
|
208
|
+
```bash
|
209
|
+
api/v2/users [name='users_list_api']
|
210
|
+
```
|
196
211
|
|
197
212
|
4. Run the Server:
|
198
213
|
|
@@ -202,23 +217,56 @@ python manage.py runserver
|
|
202
217
|
|
203
218
|
## Notes
|
204
219
|
|
205
|
-
|
220
|
+
#### 1. `API_BASE_PATH` in settings Must Include `{version}`:
|
206
221
|
|
207
222
|
The `API_BASE_PATH` should always include `{version}` to ensure proper API versioning. This is important for correctly mapping API routes to different versions.
|
208
223
|
|
209
|
-
|
224
|
+
#### 2. Using `app_name` in the `endpoint` decorator:
|
210
225
|
|
211
226
|
It's recommended to fill in the `app_name` in the `endpoint` decorator to make the API URLs **more unique and organized**. This ensures that the routes are scoped under the correct app, avoiding potential conflicts and making them easier to manage.
|
212
227
|
|
213
|
-
|
228
|
+
#### 3. Behavior When Resolving a Route:
|
229
|
+
|
230
|
+
When resolving the route using Django's `reverse()` function or any other method to resolve the URL, the latest version (highest version number) of the API will be returned. In this example, route for version 3 would be resolved:
|
231
|
+
|
232
|
+
```python
|
233
|
+
from django_api_versioning.decorators import endpoint
|
234
|
+
from django.http import JsonResponse
|
235
|
+
from django.views import View
|
236
|
+
from django.urls import reverse
|
237
|
+
|
238
|
+
|
239
|
+
@endpoint("users", version=3, app_name='account_app', view_name="users_list_api")
|
240
|
+
class UsersView(View):
|
241
|
+
|
242
|
+
def get(self, request):
|
243
|
+
|
244
|
+
return JsonResponse({"path of users_list_api view is": reverse('users_list_api')})
|
245
|
+
```
|
246
|
+
|
247
|
+
response body:
|
248
|
+
|
249
|
+
```json
|
250
|
+
{ "path of users_list_api view is": "api/v3/account_app/users" }
|
251
|
+
```
|
252
|
+
|
253
|
+
The generated URLs will be:
|
254
|
+
|
255
|
+
```bash
|
256
|
+
api/v1/account_app/users [name='users_list_api']
|
257
|
+
api/v2/account_app/users [name='users_list_api']
|
258
|
+
api/v3/account_app/users [name='users_list_api']
|
259
|
+
```
|
260
|
+
|
261
|
+
#### 4. Views with Version Less Than `API_MIN_VERSION` Are Automatically Ignored:
|
214
262
|
|
215
263
|
Any view whose `version` is less than the `API_MIN_VERSION` will be automatically ignored. This means clients will no longer have access to these older versions, **without the need to manually edit or remove code**. This is handled automatically by the package.
|
216
264
|
|
217
|
-
|
265
|
+
#### 5. URLs for Versions Between `API_MIN_VERSION` <= `version` <= `API_MAX_VERSION`:
|
218
266
|
|
219
267
|
Endpoints that have versions within the range defined by `API_MIN_VERSION` <= `version` <= `API_MAX_VERSION` will always have a corresponding URL generated. This ensures that only valid versions will be accessible, providing flexibility in version management.
|
220
268
|
|
221
|
-
|
269
|
+
## `endpoint` Decorator Function Definition
|
222
270
|
|
223
271
|
The `endpoint` decorator is designed to register API views with versioning support in a Django application. It provides flexibility in managing versioned endpoints and ensures backward compatibility with previous versions of the API.
|
224
272
|
|
@@ -10,8 +10,8 @@ tests/test_exceptions.py,sha256=fsyfA7ouIMqz6Emexqo_oB7oVEZlhqptNmwH8KX37s8,863
|
|
10
10
|
tests/test_registry.py,sha256=KQT6yWkfKZmcLShFkidHwfJfPi8yHN5i9xuzC3vqDso,2634
|
11
11
|
tests/test_settings.py,sha256=SjieOTnwHdU0E6A2-qLE3iXG5osY3qacbAzJJ7tqD-0,5213
|
12
12
|
tests/test_urls.py,sha256=DA8DbIEAYX812Re2PlTkL1OpkwCO2IZ1vW_QMh2d9nI,1207
|
13
|
-
django_api_versioning-0.1.
|
14
|
-
django_api_versioning-0.1.
|
15
|
-
django_api_versioning-0.1.
|
16
|
-
django_api_versioning-0.1.
|
17
|
-
django_api_versioning-0.1.
|
13
|
+
django_api_versioning-0.1.4.dist-info/LICENSE,sha256=iDPJdze6sBlBBSoB-BIyT2iHfHDGUAaZG3nTFd6m2FQ,1070
|
14
|
+
django_api_versioning-0.1.4.dist-info/METADATA,sha256=uqQZKUCxfsrirTnOXWIEEFCIO2EAtjsI9Z2GjLS_VFc,11994
|
15
|
+
django_api_versioning-0.1.4.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
16
|
+
django_api_versioning-0.1.4.dist-info/top_level.txt,sha256=F4n1zaE6P--9OytuMrvCD50vn7NvIVWkIl6ie9fsFck,28
|
17
|
+
django_api_versioning-0.1.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{django_api_versioning-0.1.3.dist-info → django_api_versioning-0.1.4.dist-info}/top_level.txt
RENAMED
File without changes
|