Hi Sergey,
Both options can work in some form. In case of the first one, the client doesn't really have to check invariants, you can simply have him POST to see if his order is valid, right? You will just have to be careful in designing proper error responses so the client can act accordingly. You can also offer him a way of checking if the order is valid without having to POST, which means introducing another resource for this purpose, that the client can then GET to and get the same error response.
In case of the second, you basically offer the client a STORE resource, so one that he is responsible for. That can't be an order anymore however, as you don't know when it will be permanent and if you should actually process it. So it would then be better to model a basket resource, that the user can freely manipulate. You can then return validation errors if he tries to do something that is not allowed. When your client is done building his basket, he can POST to /baskets/42/order, which creates an order (and validates invariants again of course).
Hope that helps!
- Lars