Skip to content

Commit baf8349

Browse files
wbloszykVincentLanglet
andauthoredSep 25, 2020
Fix REST API routing (#1235)
Update src/Resources/config/routing/api_nelmio_v3.xml Co-authored-by: Javier Spagnoletti <phansys@gmail.com> Update src/Resources/config/routing/api.xml Co-authored-by: Javier Spagnoletti <phansys@gmail.com> Update src/Resources/config/routing/api_nelmio_v3.xml Co-authored-by: Vincent Langlet <VincentLanglet@users.noreply.github.com> Co-authored-by: Vincent Langlet <VincentLanglet@users.noreply.github.com>
1 parent 3504f3e commit baf8349

File tree

11 files changed

+143
-44
lines changed

11 files changed

+143
-44
lines changed
 

‎UPGRADE-4.x.md

+12-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,24 @@
11
UPGRADE 4.x
22
===========
33

4-
UPGRADE FROM 3.x to 3.x
4+
UPGRADE FROM 4.x to 4.x
55
=======================
66

77
### Support for NelmioApiDocBundle > 3.6 is added
88

99
Controllers for NelmioApiDocBundle v2 were moved under `Sonata\UserBundle\Controller\Api\Legacy\` namespace and controllers for NelmioApiDocBundle v3 were added as replacement. If you extend them, you must ensure they are using the corresponding inheritance.
1010

11+
### Fix REST API routing paths
12+
13+
In version 4.6.0 some extra REST API routes were added by mistake, creating new duplicated paths pointing to existing actions (by instance `/groups/{id}.{_format}` was duplicated as `/group/{id}.{_format}`, `/users/{id}.{_format}` was duplicated as `/user/{id}.{_format}`, etc).
14+
You MUST avoid importing these routes in order to keep your API routing clean and consistent with previous versions. To do so, make sure to import some of these routing files, depending on your needs:
15+
16+
sonata_api_user:
17+
prefix: /api/user
18+
resource: "@SonataUserBundle/Resources/config/routing/standard_api.xml"
19+
# or for NelmioApiDocBundle v3
20+
#resource: "@SonataUserBundle/Resources/config/routing/standard_api_nelmio_v3.xml"
21+
1122
UPGRADE FROM 4.6 to 4.7
1223
========================
1324

‎docs/reference/api.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ In order to activate the API's, you'll also need to add this to your routing:
4747
4848
sonata_api_user:
4949
prefix: /api/user
50-
resource: "@SonataUserBundle/Resources/config/routing/api_nelmio_v3.xml"
50+
resource: "@SonataUserBundle/Resources/config/routing/standard_api_nelmio_v3.xml"
5151
5252
Serialization
5353
-------------

‎src/Resources/config/routing/api.xml

+13-16
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,36 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<routes xmlns="http://symfony.com/schema/routing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/routing https://symfony.com/schema/routing/routing-1.0.xsd">
3-
<route id="sonata_api_user_group_delete_group" path="/group/{id}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\GroupController::deleteGroupAction" format="json">
3+
<import type="xml" resource="./api/group.xml" name-prefix="sonata_api_user_group_"/>
4+
<import type="xml" resource="./api/user.xml" name-prefix="sonata_api_user_user_"/>
5+
<!-- NEXT_MAJOR: Remove these wrong routes introduced in version 4.6.0 -->
6+
<route id="sonata_api_user_group_delete_group_2" path="/group/{id}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\Legacy\GroupController::deleteGroupAction" format="json">
47
<requirement key="_format">json|xml|html</requirement>
58
</route>
6-
<route id="sonata_api_user_group_get_group" path="/group/{id}.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\Legacy\GroupController::getGroupAction" format="json">
9+
<route id="sonata_api_user_group_get_group_2" path="/group/{id}.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\Legacy\GroupController::getGroupAction" format="json">
710
<requirement key="_format">json|xml|html</requirement>
811
</route>
9-
<route id="sonata_api_user_group_get_groups" path="/groups.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\Legacy\GroupController::getGroupsAction" format="json">
12+
<route id="sonata_api_user_group_post_group_2" path="/group.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Api\Legacy\GroupController::postGroupAction" format="json">
1013
<requirement key="_format">json|xml|html</requirement>
1114
</route>
12-
<route id="sonata_api_user_group_post_group" path="/group.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Api\Legacy\GroupController::postGroupAction" format="json">
15+
<route id="sonata_api_user_group_put_group_2" path="/group/{id}.{_format}" methods="PUT" controller="Sonata\UserBundle\Controller\Api\Legacy\GroupController::putGroupAction" format="json">
1316
<requirement key="_format">json|xml|html</requirement>
1417
</route>
15-
<route id="sonata_api_user_group_put_group" path="/group/{id}.{_format}" methods="PUT" controller="Sonata\UserBundle\Controller\Api\Legacy\GroupController::putGroupAction" format="json">
18+
<route id="sonata_api_user_user_delete_user_2" path="/user/{id}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::deleteUserAction" format="json">
1619
<requirement key="_format">json|xml|html</requirement>
1720
</route>
18-
<route id="sonata_api_user_user_delete_user" path="/user/{id}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::deleteUserAction" format="json">
21+
<route id="sonata_api_user_user_delete_user_group_2" path="/user/{userId}/{groupId}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::deleteUserGroupAction" format="json">
1922
<requirement key="_format">json|xml|html</requirement>
2023
</route>
21-
<route id="sonata_api_user_user_delete_user_group" path="/user/{userId}/{groupId}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::deleteUserGroupAction" format="json">
24+
<route id="sonata_api_user_user_get_user_2" path="/user/{id}.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::getUserAction" format="json">
2225
<requirement key="_format">json|xml|html</requirement>
2326
</route>
24-
<route id="sonata_api_user_user_get_user" path="/user/{id}.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::getUserAction" format="json">
27+
<route id="sonata_api_user_user_post_user_2" path="/user.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::postUserAction" format="json">
2528
<requirement key="_format">json|xml|html</requirement>
2629
</route>
27-
<route id="sonata_api_user_user_get_users" path="/users.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::getUsersAction" format="json">
30+
<route id="sonata_api_user_user_post_user_group_2" path="/user/{userId}/{groupId}.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Legacy\Api\UserController::postUserGroupAction" format="json">
2831
<requirement key="_format">json|xml|html</requirement>
2932
</route>
30-
<route id="sonata_api_user_user_post_user" path="/user.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::postUsersAction" format="json">
31-
<requirement key="_format">json|xml|html</requirement>
32-
</route>
33-
<route id="sonata_api_user_user_post_user_group" path="/user/{userId}/{groupId}.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Legacy\Api\UserController::postUserGroupAction" format="json">
34-
<requirement key="_format">json|xml|html</requirement>
35-
</route>
36-
<route id="sonata_api_user_user_put_user" path="/user/{id}.{_format}" methods="PUT" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::putUsersAction" format="json">
33+
<route id="sonata_api_user_user_put_user_2" path="/user/{id}.{_format}" methods="PUT" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::putUserAction" format="json">
3734
<requirement key="_format">json|xml|html</requirement>
3835
</route>
3936
</routes>
+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<routes xmlns="http://symfony.com/schema/routing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/routing https://symfony.com/schema/routing/routing-1.0.xsd">
3+
<route id="delete_group" path="/groups/{id}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\Legacy\GroupController::deleteGroupAction" format="json">
4+
<requirement key="_format">json|xml|html</requirement>
5+
</route>
6+
<route id="get_group" path="/groups/{id}.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\Legacy\GroupController::getGroupAction" format="json">
7+
<requirement key="_format">json|xml|html</requirement>
8+
</route>
9+
<route id="get_groups" path="/groups.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\Legacy\GroupController::getGroupsAction" format="json">
10+
<requirement key="_format">json|xml|html</requirement>
11+
</route>
12+
<route id="post_group" path="/groups.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Api\Legacy\GroupController::postGroupAction" format="json">
13+
<requirement key="_format">json|xml|html</requirement>
14+
</route>
15+
<route id="put_group" path="/groups/{id}.{_format}" methods="PUT" controller="Sonata\UserBundle\Controller\Api\Legacy\GroupController::putGroupAction" format="json">
16+
<requirement key="_format">json|xml|html</requirement>
17+
</route>
18+
</routes>
+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<routes xmlns="http://symfony.com/schema/routing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/routing https://symfony.com/schema/routing/routing-1.0.xsd">
3+
<route id="delete_user" path="/users/{id}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::deleteUserAction" format="json">
4+
<requirement key="_format">json|xml|html</requirement>
5+
</route>
6+
<route id="delete_user_group" path="/users/{userId}/groups/{groupId}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::deleteUserGroupAction" format="json">
7+
<requirement key="_format">json|xml|html</requirement>
8+
</route>
9+
<route id="get_user" path="/users/{id}.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::getUserAction" format="json">
10+
<requirement key="_format">json|xml|html</requirement>
11+
</route>
12+
<route id="get_users" path="/users.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::getUsersAction" format="json">
13+
<requirement key="_format">json|xml|html</requirement>
14+
</route>
15+
<route id="post_user" path="/users.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::putUserAction" format="json">
16+
<requirement key="_format">json|xml|html</requirement>
17+
</route>
18+
<route id="post_user_group" path="/users/{userId}/groups/{groupId}.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Legacy\Api\UserController::postUserGroupAction" format="json">
19+
<requirement key="_format">json|xml|html</requirement>
20+
</route>
21+
<route id="put_user" path="/users/{id}.{_format}" methods="PUT" controller="Sonata\UserBundle\Controller\Api\Legacy\UserController::putUserAction" format="json">
22+
<requirement key="_format">json|xml|html</requirement>
23+
</route>
24+
</routes>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<routes xmlns="http://symfony.com/schema/routing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/routing https://symfony.com/schema/routing/routing-1.0.xsd">
3+
<route id="delete_group" path="/groups/{id}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\GroupController::deleteGroupAction" format="json">
4+
<requirement key="_format">json|xml|html</requirement>
5+
</route>
6+
<route id="get_group" path="/groups/{id}.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\GroupController::getGroupAction" format="json">
7+
<requirement key="_format">json|xml|html</requirement>
8+
</route>
9+
<route id="get_groups" path="/groups.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\GroupController::getGroupsAction" format="json">
10+
<requirement key="_format">json|xml|html</requirement>
11+
</route>
12+
<route id="post_group" path="/groups.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Api\GroupController::postGroupAction" format="json">
13+
<requirement key="_format">json|xml|html</requirement>
14+
</route>
15+
<route id="put_group" path="/groups/{id}.{_format}" methods="PUT" controller="Sonata\UserBundle\Controller\Api\GroupController::putGroupAction" format="json">
16+
<requirement key="_format">json|xml|html</requirement>
17+
</route>
18+
</routes>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<routes xmlns="http://symfony.com/schema/routing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/routing https://symfony.com/schema/routing/routing-1.0.xsd">
3+
<route id="delete_user" path="/users/{id}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\UserController::deleteUserAction" format="json">
4+
<requirement key="_format">json|xml|html</requirement>
5+
</route>
6+
<route id="delete_user_group" path="/users/{userId}/groups/{groupId}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\UserController::deleteUserGroupAction" format="json">
7+
<requirement key="_format">json|xml|html</requirement>
8+
</route>
9+
<route id="get_user" path="/users/{id}.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\UserController::getUserAction" format="json">
10+
<requirement key="_format">json|xml|html</requirement>
11+
</route>
12+
<route id="get_users" path="/users.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\UserController::getUsersAction" format="json">
13+
<requirement key="_format">json|xml|html</requirement>
14+
</route>
15+
<route id="post_user" path="/users.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Api\UserController::postUserAction" format="json">
16+
<requirement key="_format">json|xml|html</requirement>
17+
</route>
18+
<route id="post_user_group" path="/users/{userId}/groups/{groupId}.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Api\UserController::postUserGroupAction" format="json">
19+
<requirement key="_format">json|xml|html</requirement>
20+
</route>
21+
<route id="put_user" path="/users/{id}.{_format}" methods="PUT" controller="Sonata\UserBundle\Controller\Api\UserController::putUserAction" format="json">
22+
<requirement key="_format">json|xml|html</requirement>
23+
</route>
24+
</routes>
+13-16
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,36 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<routes xmlns="http://symfony.com/schema/routing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/routing https://symfony.com/schema/routing/routing-1.0.xsd">
3-
<route id="sonata_api_user_group_delete_group" path="/group/{id}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\GroupController::deleteGroupAction" format="json">
3+
<import type="xml" resource="./api_nelmio3/group.xml" name-prefix="sonata_api_user_group_"/>
4+
<import type="xml" resource="./api_nelmio3/user.xml" name-prefix="sonata_api_user_user_"/>
5+
<!-- NEXT_MAJOR: Remove these wrong routes introduced in version 4.6.0 -->
6+
<route id="sonata_api_user_group_delete_group_2" path="/group/{id}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\GroupController::deleteGroupAction" format="json">
47
<requirement key="_format">json|xml|html</requirement>
58
</route>
6-
<route id="sonata_api_user_group_get_group" path="/group/{id}.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\GroupController::getGroupAction" format="json">
9+
<route id="sonata_api_user_group_get_group_2" path="/group/{id}.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\GroupController::getGroupAction" format="json">
710
<requirement key="_format">json|xml|html</requirement>
811
</route>
9-
<route id="sonata_api_user_group_get_groups" path="/groups.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\GroupController::getGroupsAction" format="json">
12+
<route id="sonata_api_user_group_post_group_2" path="/group.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Api\GroupController::postGroupAction" format="json">
1013
<requirement key="_format">json|xml|html</requirement>
1114
</route>
12-
<route id="sonata_api_user_group_post_group" path="/group.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Api\GroupController::postGroupAction" format="json">
15+
<route id="sonata_api_user_group_put_group_2" path="/group/{id}.{_format}" methods="PUT" controller="Sonata\UserBundle\Controller\Api\GroupController::putGroupAction" format="json">
1316
<requirement key="_format">json|xml|html</requirement>
1417
</route>
15-
<route id="sonata_api_user_group_put_group" path="/group/{id}.{_format}" methods="PUT" controller="Sonata\UserBundle\Controller\Api\GroupController::putGroupAction" format="json">
18+
<route id="sonata_api_user_user_delete_user_2" path="/user/{id}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\UserController::deleteUserAction" format="json">
1619
<requirement key="_format">json|xml|html</requirement>
1720
</route>
18-
<route id="sonata_api_user_user_delete_user" path="/user/{id}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\UserController::deleteUserAction" format="json">
21+
<route id="sonata_api_user_user_delete_user_group_2" path="/user/{userId}/{groupId}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\UserController::deleteUserGroupAction" format="json">
1922
<requirement key="_format">json|xml|html</requirement>
2023
</route>
21-
<route id="sonata_api_user_user_delete_user_group" path="/user/{userId}/{groupId}.{_format}" methods="DELETE" controller="Sonata\UserBundle\Controller\Api\UserController::deleteUserGroupAction" format="json">
24+
<route id="sonata_api_user_user_get_user_2" path="/user/{id}.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\UserController::getUserAction" format="json">
2225
<requirement key="_format">json|xml|html</requirement>
2326
</route>
24-
<route id="sonata_api_user_user_get_user" path="/user/{id}.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\UserController::getUserAction" format="json">
27+
<route id="sonata_api_user_user_post_user_2" path="/user.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Api\UserController::postUserAction" format="json">
2528
<requirement key="_format">json|xml|html</requirement>
2629
</route>
27-
<route id="sonata_api_user_user_get_users" path="/users.{_format}" methods="GET" controller="Sonata\UserBundle\Controller\Api\UserController::getUsersAction" format="json">
30+
<route id="sonata_api_user_user_post_user_group_2" path="/user/{userId}/{groupId}.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Api\UserController::postUserGroupAction" format="json">
2831
<requirement key="_format">json|xml|html</requirement>
2932
</route>
30-
<route id="sonata_api_user_user_post_user" path="/user.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Api\UserController::postUsersAction" format="json">
31-
<requirement key="_format">json|xml|html</requirement>
32-
</route>
33-
<route id="sonata_api_user_user_post_user_group" path="/user/{userId}/{groupId}.{_format}" methods="POST" controller="Sonata\UserBundle\Controller\Api\UserController::postUserGroupAction" format="json">
34-
<requirement key="_format">json|xml|html</requirement>
35-
</route>
36-
<route id="sonata_api_user_user_put_user" path="/user/{id}.{_format}" methods="PUT" controller="Sonata\UserBundle\Controller\Api\UserController::putUsersAction" format="json">
33+
<route id="sonata_api_user_user_put_user_2" path="/user/{id}.{_format}" methods="PUT" controller="Sonata\UserBundle\Controller\Api\UserController::putUserAction" format="json">
3734
<requirement key="_format">json|xml|html</requirement>
3835
</route>
3936
</routes>

0 commit comments

Comments
 (0)