TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

What I wish I knew before building a Shopify App

366 pointsby Dragonyabout 4 years ago

31 comments

stickfigureabout 4 years ago
I built a print-on-demand system that integrates into Shopify stores. To vent a little...<p>* I can concur that their API is unreliable. About 1 in 5 of my CI runs fail with mysterious 500 errors. It&#x27;s infuriating.<p>* The support channels are a wasteland. Do not expect help.<p>* The documentation is super thin. At first glance it looks decent - there&#x27;s the objects, there&#x27;s the fields those objects have. But it&#x27;s missing all the details about how those fields are supposed to work. Example: A Fulfillment has a tracking_numbers <i>array</i>, but there doesn&#x27;t seem to be any way to add multiple tracking numbers. The docs are silent, and questions about this in the support channels remain unanswered. For years.<p>* There are two completely different APIs (graphql and REST), which do not have equal capabilities. If Shopify is planning on deprecating one of them, they should give us guidance.<p>* The API is inconsistent. I count at least FIVE different representations of an Address structure, each slightly different for no apparent reason. Eg &quot;country&quot; vs &quot;countryCode&quot;. This is the kind of thing that creeps into projects in dynamic languages when nobody&#x27;s paying attention.<p>* There&#x27;s a lot of overengineered stuff. The Metadata API is really unpleasant compared to Stripe&#x27;s simpler approach.<p>* There&#x27;s no way to set up common shipping scenarios like &quot;$N for first item, $M for each additional&quot;.<p>I could go on. But I will say this: It&#x27;s better than Etsy&#x27;s API. Though Etsy is finally working on it again, so maybe that will change.
评论 #26518561 未加载
评论 #26521416 未加载
评论 #26519881 未加载
评论 #26517658 未加载
评论 #26524801 未加载
评论 #26516937 未加载
donutdan4114about 4 years ago
I&#x27;ve been building Shopify apps for around 5 years now, and have 4 apps with around 15k users. I feel the pain this author feels with some additional notes..<p>Our apps are built in PHP using the polaris.css for styling components. We have some embedded apps currently (before Shopify began requiring the session token). Personally, the embedded experience is only good for simpler apps. If your app is more complex with lots of options and settings and things to show, the embedded experience is SO SMALL. Literally 40% of the screen is taken up by the Shopify admin leaving only a small portion for your app. Makes interface design more difficult when so much of the top&#x2F;left part of the screen is taken up by Shopify admin.<p>Their API and webhooks are &quot;fairly&quot; reliable. We&#x27;re consuming around 10k to 20k webhooks per hour and performing 20k to 50k API calls per hour. We rarely have issues. We are using their Amazon EventBridge integration to accept webhooks as a sort of buffer against them DDOSing our applications.<p>The largest issue with their API at scale is dealing with the API limits of 2 to 4 requests per second. Since some things require performing multiple API calls, and we deal with massive e-commerce stores that may need to perform 100,000 tasks, it can take a long time to perform the work (we have to artificially delay the API calls to not hit their limits). Also their GraphQL API has a complex limit system based on the &quot;amount&quot; of data returned, which makes fetching data even more complicated than their REST API.<p>My other big gripe with their API is that they have a GraphQL and REST API with different features. They support different filters, different fields they return, different types of objects... It&#x27;s a real PITA to try and work seamlessly between two different APIs (e.g. data formatted differently). And neither API is 100% solid, depending on the features your app needs you will basically need to use both APIs.<p>Generally my experience has been pretty good with Shopify. Their API changes can be scary, but at least they use versioning so they don&#x27;t break the current version you&#x27;re using. They are constantly adding new features too.
评论 #26519033 未加载
评论 #26515524 未加载
评论 #26522568 未加载
评论 #26519873 未加载
drchiuabout 4 years ago
My biggest problem with the ecosystem is how Shopify tries to deflect their own customer problems onto their partners to solve. And oftentimes, these same customers expect the partners to solve it for free.<p>Examples:<p>- Their default theme (provided by Shopify) has problems. Blame it on the app developer. &quot;It&#x27;s the app&#x27;s fault.&quot; Yes, there are some poorly developed apps, but this lumps together the good with the bad.<p>- Customers use the app review system to hold developer hostage for feature requests. &quot;Create this feature for us and I&#x27;ll edit my review.&quot;<p>- Shopify&#x27;s customer service reps says, &quot;It must be the app that&#x27;s causing this.&quot; Reading the CSR&#x27;s emails, it is clear that this person does not understand the (technical) issues and is only trying to close the ticket. Customer takes what the CSR says as gospel and you, as the developer, spends a lot of time trying to fight that mindset.<p>I can&#x27;t help but feel a big part of Shopify&#x27;s early strategy was that the demographic of customers they were trying to attract just weren&#x27;t a great type of customer, and that the partner program allowed them to enlist a lot of hungry developers willing to work for free (or next to nothing).<p>There is definitely room for improvement. I have mixed feelings about it, as their ecosystem provided me with a way to make a living many years ago. I don&#x27;t depend on them anymore, but I wouldn&#x27;t argue against trying your luck out there if you&#x27;re starting out. Just recognize that there is a certain culture and way of practice there.
评论 #26516048 未加载
评论 #26527479 未加载
评论 #26525167 未加载
评论 #26525096 未加载
评论 #26517217 未加载
danpalmerabout 4 years ago
We&#x27;ve just started developing a Shopify integration and used their Python API library because we&#x27;re building it into an existing large Django codebase, and I&#x27;ve been shocked at the quality of the API library. We&#x27;re now aiming to rewrite the bits we need.<p>- `import shopify` makes an API request. If their API rate limits you, your server will probably crash. This happened to us in production.<p>- That API request gets a dynamic list of supported API versions. If the version you&#x27;ve hard-coded in your app (because it&#x27;s what you support) is no longer in that list, it will raise a VersionNotFoundError and your app will probably fail in some significant way.<p>- There&#x27;s no connection persistence. Every API call sets up and tears down a full connection, a noticeable performance impact.<p>- Internally the library uses a lot of global state, it&#x27;s certainly not safe to use in async code – too easy to use the wrong credentials on a request – and I suspect it&#x27;s also not thread safe.<p>- Despite having something called a Session, very similar in documentation to a requests.Session or httpx.Session, it&#x27;s neither, it&#x27;s just a container for some creds. No sessions are available at all.<p>- It&#x27;s mostly a wrapper around Pyactiveresource, which appears to have a lot of similar issues – internal state that&#x27;s hidden that causes things to not work as you expect.<p>I suspect that the Python library was developed by Ruby engineers, some of the practices are things I&#x27;ve seen in Ruby but that just don&#x27;t fit into the Python ecosystem.<p>From what I can tell their API deprecation strategy is quite hostile to developers.<p>I think it would be difficult to build what I&#x27;d consider to be production-grade services on top of the library. This is in stark contrast to others such as Stripe&#x27;s API&#x2F;libraries which are fantastic.
评论 #26517710 未加载
评论 #26518937 未加载
评论 #26518617 未加载
评论 #26521408 未加载
评论 #26521866 未加载
评论 #26516264 未加载
评论 #26517947 未加载
colesantiagoabout 4 years ago
Shopify is an extremely restrictive platform for merchants and developers, I urge people not to use it if they wish to build on top of it.<p>There isn&#x27;t ways to have a custom checkout (one page) with this system and subscriptions are not natively built in, relying on a third party ecosystem.<p>Theme development is also arcane and not the standard way web developers build a simple website.<p>Oh and they disallow you to use Stripe for your store and you have to go through Shopify payments instead.
评论 #26515512 未加载
评论 #26517821 未加载
评论 #26515871 未加载
评论 #26515874 未加载
评论 #26515882 未加载
评论 #26515479 未加载
picodguyoabout 4 years ago
Ugh, I can so relate to this right now. I followed their Node embedded app tutorial closely, submitted my app, then found out they no longer allow embedded apps to use cookies like their tutorial does. Finding up to date documentation is a struggle and some of the components they suggest you use are closed source and completely undocumented.
评论 #26525204 未加载
brunojppbabout 4 years ago
I share some of the pains the author raises. One major thing that is a bit discouraging is the inconsistent feature support they have between REST and GraphQL APIs. Neither of them cover all functionalities, so sometimes you have to be bouncing back and forth between REST and GraphQL.<p>On the other hand, they are doing an amazing job and constantly providing updates. Their docs are really good and improving everyday. Kudos to the shopify dev team.
评论 #26516823 未加载
xalabout 4 years ago
Lots of really fair feedback here. We hear you.
评论 #26518051 未加载
评论 #26518019 未加载
评论 #26521531 未加载
评论 #26519326 未加载
评论 #26521299 未加载
trutannusabout 4 years ago
I developed on the Shopify platform for a while. I found it very odd how restrictive their endpoint was. Most of my job involved creating really hacky workaround for their weirdly missing features.
isoskelesabout 4 years ago
Maybe not that helpful of an addition, but the most surprising thing I found was that Shopify has an option for an &quot;app proxy&quot;, in which you can have some separate, custom web server that gets proxied through your Shopify store.<p>I&#x27;ve used this to some success in building a more robust product customization app (with functionality very specific to our business), more so than what I could find on their store. The biggest con for using the app proxy is around authentication. You can&#x27;t do much special stuff with auth, basically the simplest option is to just wrap your proxied pages in a liquid check for customer.id. (Although, I can see this as a pro rather than a con, as it forces you to keep the proxy app simple.)<p>My biggest worry is one day Shopify just decides to discontinue app proxies. It doesn&#x27;t seem like an option they try to point developers toward, so I don&#x27;t trust it and am thinking about building on top of their API to avoid this.
LMYahooTFYabout 4 years ago
So I appear to be on a Shopify black list.<p>I&#x27;ve called them, my bank, and on a few occasions even tried other people&#x27;s cards.<p>I&#x27;m declined no matter what, by Shopify. It&#x27;s been this way for well over a year. Sometimes retailers will manually process a transaction, but otherwise it&#x27;s infuriating for me to see Shopify grow in the market.
评论 #26516311 未加载
评论 #26520762 未加载
dubcanadaabout 4 years ago
Polaris does have a CSS file - <a href="https:&#x2F;&#x2F;github.com&#x2F;Shopify&#x2F;polaris-react#using-the-css-components" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;Shopify&#x2F;polaris-react#using-the-css-compo...</a><p>You are free to use it as you want, it doesn&#x27;t support the dynamic components obviously since it&#x27;s CSS. But you can easily reimplement the parts you want.
chiefalchemistabout 4 years ago
I&#x27;m reading a good number of the comments and while I understand it&#x27;s not a sample without bias, I have to ask:<p>How did Shopify get to be the beast that it is?<p>Why doesn&#x27;t someone else step up and into what looks like a massive opportunity, especially since Covid have push so many transactions online?<p>I have worked with Shopify customizing themes and adding custom functionality. It good when it great and you&#x27;re within its sweetspot. But then it drops off like a cliff. The developer workflow? Shockingly dated.<p>I&#x27;ve worked with WooCommerce. Great tool. But it requires knowledge and resources.<p>I&#x27;ve taken the BigCommerce training. Felt like Shopify 3.x but I&#x27;m not sure they&#x27;re positioning well for the long term.<p>I know there are others.<p>It seems to me that there&#x27;s a sweetspot between Shopify and WooComm. User friends yet also developer friendly. Perhaps not easy to do. But that&#x27;s not humans on Mars either, is it?
评论 #26521112 未加载
评论 #26518769 未加载
评论 #26519857 未加载
code_duckabout 4 years ago
This is a familiar struggle, as far as the concepts. I did a rather similar project based on Etsy about 10 years ago. We made a javascript-invoked widget (probably an iframe IIR), intended to be embedded onto blogs and webpages with a single line of code. This gathered a lot of data from Etsy. Shop details, items for sale, feedback, favoriters. Somewhere there&#x27;s an article on the Etsy blog, but if curious you can check out this blog article. <a href="http:&#x2F;&#x2F;happycloudmoments.blogspot.com&#x2F;2010&#x2F;07&#x2F;craftcult-introduces-pocket-shop-widget.html" rel="nofollow">http:&#x2F;&#x2F;happycloudmoments.blogspot.com&#x2F;2010&#x2F;07&#x2F;craftcult-intr...</a><p>At the time I already had a popular site based on their API. I had noticed that in general, it&#x27;s a tough business to be a disconnected 3rd party developing on a closed platform. You&#x27;re at the whim of the platform owner, slave to their intentions and decisions, good or bad. It&#x27;s like having a remote job where nobody talks to you.<p>I got over API unreliability with a system to retry calls a few times. Etsy API calls could fail in several distinct ways, so my parser had a lot of stages (check for HTTP status, parse for certain strings, check if it&#x27;s empty or an empty string, so forth). The calls also occasionally took much longer than usual. I implemented a caching system for the widgets.<p>It sounds like Shopify reliability is much worse than Etsy&#x27;s at the time. Other than outages, I believe we&#x27;d get about 2% of calls failing for different reasons, which would usually work on a retry.<p>Changes were difficult to deal with because they could come suddenly. The worst ones were breaking changes that apparently Etsy was unaware of. I&#x27;d start getting errors and have no idea if it was a bug or an intentional change, and write workarounds only for them to fix the bug a few days later. We also experienced the removal of features with other apps. Or, one time we spent a couple months on a feature and then it turned out Etsy had been working on the same thing themselves.
deedubayaabout 4 years ago
I&#x27;ve heard shopify has been shaking down SaaS apps for past revenue % which they charge outside of the shopify ecosystem. Does anyone know if this is true or have more details?
评论 #26515998 未加载
评论 #26515891 未加载
评论 #26515941 未加载
isaacbowenabout 4 years ago
In support of the platform:<p>* I&#x27;ve never had zero options for solving a problem. Ten years ago, I needed to build a customer login system on top of Shopify. (Like, before Shopify had one of its own.) I had enough room to do that in javascript, and it became an app called Gatekeeper. (Today&#x27;s spiritual successor: Locksmith.)<p>* Whoever works on patterns at Shopify does a really, really good job. They think through things slowly and thoroughly, resulting in resource models that that are usually <i>refined</i> over time, instead of remodeled entirely. This is a good sign.<p>* This is a second bullet point to underscore the previous point about Shopify&#x27;s pattern-making. I&#x27;ve been on this platform for a decade straight, and I don&#x27;t <i>deal</i> with systemic inconsistency. I&#x27;m only here because Shopify is really, really good at patterns.<p>* This is a third pattern-related point to observe that Shopify usually defers solving a problem, rather than putting forward a fragile or brittle solution. (How long did it take for order editing to arrive?) By my reading, they&#x27;d rather take a while to land on and deliver a solution that will create a <i>broader</i> future, than more quickly deliver a solution that will <i>limit</i> the future.<p>* Yes, there are occasionally major&#x2F;breaking API changes. Honestly, I love this. For me, it forces the whole system to stay engaged, and stay <i>alive</i>. Yes, I know the counter-arguments to this. :)<p>This is why I&#x27;m still here, ten years later. Yes, some things are short-term hard. But the things that are long-term important are all locked in.<p>---<p>Also yeah, building and sustaining an app is work. This is part of why I made <a href="https:&#x2F;&#x2F;apps.shopify.com&#x2F;mechanic" rel="nofollow">https:&#x2F;&#x2F;apps.shopify.com&#x2F;mechanic</a>. I love the Shopify platform, so, so much, and also I needed a way to solve really specific problems more quickly, and keep those solutions running more sustainably. So: platform within a platform. Lots of nested similarity here, in the way that Shopify thinks about solving problems and the way Mechanic thinks about solving problems within Shopify.
评论 #26519262 未加载
评论 #26520397 未加载
sarabad2021about 4 years ago
Biggest issue I&#x27;m dealing with is their integrated iframe app view and trying to persist a session since cross-site cookies are being blocked more and more. For instance Safari now blocks them by default and Chrome announced they are doing the same. That means when the user logs in via the frame, you can&#x27;t set a cookie or add a jwt to the localstorage. All blocked and there are no workarounds. Awesome.
yowlingcatabout 4 years ago
Does anyone have any experiences with Saleor? Shopify&#x27;s tech seems like a clusterfuck by 2021 standards in a lot of ways (Liquid templates make theme reusability a pain or borderline impossible; backend issues mentioned in this thread), and yet, I&#x27;m not sure any of its mature proprietary competitors (Magento, BigCommerce, etc) are any better; if anything, I consistently hear that they are worse with some caveats.<p>What I am trying to figure out is if Shopify is &quot;bad&quot; or just &quot;warty&quot; -- I realize that is subjective and heavily depends on what one is trying to use it for, but it&#x27;s still a challenge to reason about.
评论 #26517912 未加载
TedDoesntTalkabout 4 years ago
&gt; You&#x27;re going to integrate your code into their proprietary platform, so they need the integration to be as straight forward as possible. Thus an SPA is a very good candidate.<p>This makes no sense.
that_guy_iainabout 4 years ago
I built a shopify app for my ecommerce monitoring system and my system is mostly written in PHP I have some Go and Python for various stuff by the core is in PHP mainly because I think PHP is really good language for web apps, it&#x27;s designed for it, literally. I went to use the Shopify php library and it&#x27;s literally dead, I looked at the issues and there was a Shopify employee advising people to use an unoffical one that basically supports everything. It&#x27;s cool the employee pointed people in the right direction but I think it&#x27;s a sad state of affairs that one of the most popular web programming languages in the word has no support from them.<p>Also, the reason people can&#x27;t use Shopify with my system yet is that even to be approved for an unlisited application you need to allow for account creation via Shopify. I understand for listed apps in the store but if I want to have an app where they click a button on my site and I connect to their shopify system and get data I still need to support this feature I won&#x27;t use. That saddened me. I just need to create time to allow for account creation via their app store and figure out what that means getting the info and how to handle user confirmation if at all.<p>(Shameless plug - <a href="https:&#x2F;&#x2F;www.ootliers.com" rel="nofollow">https:&#x2F;&#x2F;www.ootliers.com</a>)
mistahenryabout 4 years ago
I recently got an app on to the Shopify app store. The review process is the worst that I&#x27;ve been through.<p>My rejections in chronological order:<p>1. Rejected for having text in the app icon. The text was our company&#x27;s name and is our logo which we had to change for Shopify...<p>2. Rejected because we didn&#x27;t implement the GDPR webhooks. We don&#x27;t operate in Europe so I didn&#x27;t think they apply. I could have read this in the documentation but still...<p>3. My shop set up geographic restrictions for a few South East Asian countries and the shopify tester tested with a store with an Albania as the country, USD as the currency, and a fictional address. Shopify actually prevents this kind of invalid installation (that&#x27;s the whole point of the geographic restriction). So when my store rejected his onboarding attempt with a generic error due to what was previously thought to be nothing more than a sanity check, he rejected my app and imposed a <i>2 week ban</i> on my partner account from resubmitting.<p>Ultimately, I was able to appeal the decision through a different channel. We had our first customer waiting to use our app so this added an extra 10 days of delay and a whole bunch of unneeded stress in my startup.
评论 #26525265 未加载
bookmarkableabout 4 years ago
I&#x27;d be curious if any of the Shopify app devs in this thread have an opinion on how they handle customer data.<p>As a Shopify store owner, I was aghast how common it was on the platform to require allowing third party apps entirely too much information about my end customers. I was very uncomfortable leaving some otherwise promising apps installed in my store, and eventually gave up on Shopify entirely.
评论 #26518053 未加载
moron4hireabout 4 years ago
&gt; To my surprise every 10 refreshes or so, I would get a 404 error. For the hardcoded resource no less! It&#x27;s frustrating to work with an API that already seems unreliable when testing locally.<p>Google actively does this with many of their APIs. Running locally, their APIs will be very unreliable. Once you&#x27;re live on the domain you&#x27;ve configured, everything is much more reliable.<p>I don&#x27;t know if they do it to force you to consider cases where the API returns errors, or if it&#x27;s some kind of anti-scraping provision, but it can be extremely confusing and frustrating if it&#x27;s your first time working with the API and you&#x27;re not sure how things are going to actually work (if at all!) when you deploy.
flycatchaabout 4 years ago
To the OP, they do provide the raw HTML to Polaris Components (this is what I use -- I don&#x27;t know React). Not sure if that&#x27;s the same as HTML &quot;components&quot; though.
tlarkworthyabout 4 years ago
The Checkout thing is a con that prevents fairly run of the mill stuff like conversion tracking <i>sigh</i>
matt_fabout 4 years ago
Are there any viable alternatives to shopify for developers that don&#x27;t have these issues?
JRGCabout 4 years ago
+1 on page layout
kmeisthaxabout 4 years ago
&gt;Integration with the shop frontend is difficult if you&#x27;re not making a theme<p>As someone on the opposite end of this problem (I&#x27;m in custom theme development), the client wanting to install a new app is an immediate source of frustration for reasons almost completely out of your or their control.<p>If your app just gives us a manual install option, that&#x27;s usually the best solution for me. I can make judgments as a developer as how best to incorporate your app into my theme. Furthermore, because I&#x27;m doing it manually, I get to follow all of my version control and testing practices. You see, Shopify actually promotes some very terrible development practices (not your fault). I have to avoid that by working in development themes, storing all my code in a self-hosted Git repository elsewhere, tagging all my production deploys, and using Git to tell me what files have been changed so I can be ultra-conservative in my deploys. Why do I need to do that? Well...<p>Some apps have automatic installers, which try to guess what theme you&#x27;re using and then install files as they wish to the current production theme. Not only is that dangerous (what if the app breaks something?), even if the app does install correctly; it usually doesn&#x27;t hit the developer themes and any developer working out of the Git tree is now working with stale files. I have to pull theme exports and compare changes to reverse-engineer what was added so that we don&#x27;t wind up accidentally uninstalling half the app when we change a product template or something.<p>Part of the problem is that Shopify is specifically designed to be both &quot;easy to use&quot; and give it&#x27;s merchants a high level of control over their storefront. This precludes a lot of otherwise obvious solutions to this problem, for various reasons:<p>1. You can&#x27;t use Git as a deployment mechanism because it has a terrible UX and most new merchants aren&#x27;t going to figure out how to use it. Even with a non-terrible UX you still need to educate users about it&#x27;s various failure modes, including merge conflicts and the like. 2. It would be nice to have standard extension points between app and theme developers, but that winds up tying the hands of both a little. Part of the problem is that any level of extensibility also either takes things out of the hands of theme developers, or requires new users understand how to implement the component. I was hoping something like the new section system (which I haven&#x27;t gotten a chance to play around yet) would fix this for app developers.<p>If Shopify was willing to go a little bit up-market (and, given how they&#x27;ve become the favorite platform of Facebook scammers, they should) they could fix these problems by offering ways for theme and app developers to agree on specific extension points. This kind of ruins the whole &quot;just edit this template to get a thing on your theme&quot; aspect of it, but Shopify&#x27;s really outgrowing what it started with IMHO.<p>(By the way, there&#x27;s a special circle of hell reserved for page builder apps that store everything in the current production theme. I recently had to deal with a client whose shop no longer allowed them to clone their main template as it was full of literally hundreds of templates and assets from this one app. After literal hours of manual garbage collection, I was able to get it to the point where a theme clone merely took 20 minutes rather than failing outright.)
hahahaheabout 4 years ago
I just don’t get why people continue to build around Shopify. Is Stripe&#x2F;Square not good enough? Don’t you save a ton by forgoing Shopify?
评论 #26517043 未加载
评论 #26518158 未加载
评论 #26517097 未加载
darepublicabout 4 years ago
What does Shopify offer that a stripe integration doesn&#x27;t?
评论 #26517776 未加载
intrasightabout 4 years ago
I read &quot;Shopify App&quot; as one that clones&#x2F;competes with Shopify. I prefer &quot;app that uses Shopify&quot;
评论 #26517721 未加载